鱼C论坛

 找回密码
 立即注册
查看: 2335|回复: 0

[学习笔记] Java-028 IO流之标准、随机、合并流

[复制链接]
发表于 2019-1-11 14:01:22 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 moc 于 2019-1-11 16:43 编辑

1、标准流
System类中的静态成员:in,out,err
代表标准输入输出流和错误输出流,标准输入 --- 键盘;  标准输出 --- 显示器。
System.in的类型 ==> InputStream
System.out的类型 ==>  PrintStream
BufferedReader包装标准输入:
  1. BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

  2. System.out.println("请输入一个字符串:");
  3. String line = br.readLine();
  4. System.out.println("你输入的字符串是:" + line);

  5. System.out.println("请输入一个整数:");
  6. line = br.readLine();
  7. int i = Integer.parseInt(line);
  8. System.out.println("你输入的整数是:" + i);
复制代码
BufferedWriter包装标准输出:
  1. BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));

  2. bw.write("hello");
  3. bw.newLine();
  4.                
  5. bw.write("world");
  6. bw.newLine();
  7.        
  8. bw.write("java");
  9. bw.newLine();
  10. bw.flush();
  11.                
  12. bw.close();
复制代码
2、随机流
随机流RandomAccessFile类Object类的子类。它融合了InputStream和OutputStream的功能。
支持对文件的随机访问读取和写入,类似于C语言中对文件的操作。
1. 构造方法
public RandomAccessFile(String name, String mode)  ----------------->  指定随机文件流对象所对应的文件名,以 mode 表示对文件的访问模式;
public RandomAccessFile (File file, String mode)  ---------------------->  以 file 指定随机文件流对象所对应的文件名,以 mode 表示访问模式.
注意: mode 表示所创建的随机读写文件的操作状态,其取值包括:
        r:  表示以只读方式打开文件。
        rw:表示以读写方式打开文件,使用该模式只用一个对象即可同时实现读写操作。
2.常用方法
long length()   --------------------------------------->  返回文件长度
void seek(long pos)  -------------------------------->  移动文件位置指针,pos 指定从文件开头的偏离字节数
int skipBytes(int n)  --------------------------------->  跳过 n 个字节,返回数为实际跳过的字节数
int read()  -------------------------------------------->  从文件中读取一个字节,字节的高 24 位为 0,若遇到文件结尾,返回-1
final byte readByte()  -------------------------------> 从文件中读取带符号的字节值
final char readChar()  -------------------------------> 从文件中读取一个 Unicode 字符
final int readInt()  -----------------------------------> 从此文件读取一个有符号的 32 位整数
final void writeChar(inte c)  ------------------------>  写入一个字符,两个字节
  1. RandomAccessFile raf = new RandomAccessFile("raf.txt", "rw");    // 创建随机访问流对象

  2. int i = raf.readInt();
  3. System.out.println(i);

  4. System.out.println("当前文件的指针位置是:" + raf.getFilePointer());

  5. char ch = raf.readChar();
  6. System.out.println(ch);
  7. System.out.println("当前文件的指针位置是:" + raf.getFilePointer());

  8. raf.seek(4);    // 从指定位置开始读写
  9. ch = raf.readChar();
  10. System.out.println(ch);

  11. raf.writeInt(100);    // 写文件
  12. raf.writeChar('a');
  13. raf.writeUTF("中国");

  14. raf.close();
复制代码
3、合并流
SequenceInputStream 表示其他输入流的逻辑串联。它从输入流的有序集合开始,并从第一个输入流开始读取,直到到达文件末尾,接着从第二个输入流读取,依次类推,直到到达包含的最后一个输入流的文件末尾为止。
构造方法及应用
public SequenceInputStream(Enumeration<? extends InputStream> e)  ---------->  将按顺序读取由该枚举生成的输入流.
  1. InputStream s1 = new FileInputStream("1.txt");
  2. InputStream s2 = new FileInputStream("2.txt");
  3. SequenceInputStream sis = new SequenceInputStream(s1, s2);
  4. BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("3.txt"));

  5. byte[] bys = new byte[1024];
  6. int len = 0;
  7. while ((len = sis.read(bys)) != -1) {
  8.         bos.write(bys, 0, len);
  9. }

  10. bos.close();
  11. sis.close();
复制代码
SequenceInputStream(InputStream s1, InputStream s2)  ---------------------------->  将按顺序读取这两个参数,先读取 s1,然后读取 s2.
  1. Vector<InputStream> v = new Vector<InputStream>();
  2. InputStream s1 = new FileInputStream("1.txt");
  3. InputStream s2 = new FileInputStream("2.txt");
  4. InputStream s3 = new FileInputStream("3.txt");
  5. v.add(s1);
  6. v.add(s2);
  7. v.add(s3);
  8. Enumeration<InputStream> en = v.elements();
  9. SequenceInputStream sis = new SequenceInputStream(en);
  10. BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("4.txt"));

  11. byte[] bys = new byte[1024];
  12. int len = 0;
  13. while ((len = sis.read(bys)) != -1) {
  14.         bos.write(bys, 0, len);
  15. }

  16. bos.close();
  17. sis.close();
复制代码

本帖被以下淘专辑推荐:

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-5-4 23:41

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表