首先我们来看看一个简单的Byte Stream操作。程序在循环中每次读取一个字节和写入一个字节,最后完成文件的拷贝操作。注意try...with段和in.read()/out.write()方法:
package com.freesoft.java7newfeature;
import java.io.FileInputStream;
import java.io.FileOutputStream;
public class TestByteStream {
public static final int BUF_SIZE = 1024;
public static void main(String[] args) {
try (
FileInputStream in = new FileInputStream("files/tbs/source.png");
FileOutputStream out = new FileOutputStream("files/tbs/target.png");){
int c = 0;
while((c = in.read()) != -1) {
out.write(c);
}
out.flush();
} catch (Exception e) {
e.printStackTrace();
}
}
}
下面我们看看字符流的操作。我们这里使用文本文件来作为源和目标,可以看到reader.read()和writer.write()每次读取和写入都是一个字符:
package com.freesoft.java7newfeature;
import java.io.FileReader;
import java.io.FileWriter;
public class TestCharacterStream {
public static final int BUF_SIZE = 1024;
public static void main(String[] args) {
try (
FileReader reader = new FileReader("files/tbs/source.txt");
FileWriter writer = new FileWriter("files/tbs/target.txt");){
int c = 0;
while((c = reader.read()) != -1) {
writer.write(c);
}
writer.flush();
} catch (Exception e) {
e.printStackTrace();
}
}
}
如果我们需要使用缓冲区,我们就需要使用BufferedReader和BufferedWriter(如果是二进制读写则使用BufferedInputStream和BufferedOutputStream,使用了wrap pattern):
package com.freesoft.java7newfeature;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileReader;
import java.io.FileWriter;
public class TestBufferedCharStream {
public static final int BUF_SIZE = 1024;
public static void main(String[] args) {
try (
BufferedReader reader = new BufferedReader(new FileReader("files/tbs/source.txt"));
BufferedWriter writer = new BufferedWriter(new FileWriter("files/tbs/target.txt"));){
int c = 0;
while((c = reader.read()) != -1) {
writer.write(c);
}
writer.flush();
} catch (Exception e) {
e.printStackTrace();
}
}
}
最后我们看一下在Java7中如何操作有分隔符的文件,这里使用了一个sanner类:
package com.freesoft.java7newfeature;
import java.io.BufferedReader;
import java.io.FileReader;
import java.util.Scanner;
public class TestTokenizedText {
public static void main(String[] args) {
try (
Scanner s = new Scanner(new BufferedReader(new FileReader("files/tbs/source.txt")));
){
// 此处可以使用各种参数,看文件是使用什么形式分割
s.useDelimiter("\r\n");
while(s.hasNext()) {
System.out.println(s.next());
}
} catch (Exception e) {
e.printStackTrace();
}
}
}