moc 发表于 2019-1-11 14:01:22

Java-028 IO流之标准、随机、合并流

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

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

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

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

bw.write("hello");
bw.newLine();
               
bw.write("world");
bw.newLine();
       
bw.write("java");
bw.newLine();
bw.flush();
               
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)------------------------>写入一个字符,两个字节
RandomAccessFile raf = new RandomAccessFile("raf.txt", "rw");    // 创建随机访问流对象

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

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

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

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

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

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

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

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

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

bos.close();
sis.close();
页: [1]
查看完整版本: Java-028 IO流之标准、随机、合并流