Java I/O操作的步骤
1、使用File类打开一个文件。
2、通过字节流或字符流的子类指定输出位置。
3、进行读/写操作。
4、关闭输入/输出。
字节流
InputStream、OutputStream,子类如上图所示。
InputStream没有readLine()方法,不能读取一行。
使用字节流时,不调用close()方法也可以输出。
public class Demo {
public static void main(String[] args) throws IOException {
//字节流输出到文件
File file = new File("D:/workspace/text.txt");
OutputStream out = new FileOutputStream(file);
String str = "Hello World!";
byte[] b = str.getBytes();
out.write(b);
}
}
字符流
Reader、Writer,子类如上图所示。
BufferedReader有readLine()方法,可以读取一整行。
使用字符流时,要调用close()方法完成输出,如果不使用close()方法,可以用flush()方法清除缓冲区,也可以完成输出。
public class Main {
public static void main(String[] args) throws IOException {
// 字符流输出到文件
File file = new File("D:/workspace/text.txt");
Writer out = new FileWriter(file);
String str = "hello java";
out.write(str);
out.close();
// out.flush(); // 强制清空缓冲区,这样就可以在没有close的情况下输出到文件
}
}
字节流转字符流--InputStreamReader
字符流转字节流--OutputStreamWriter
public class Demo {
public static void main(String[] args) throws IOException {
// 读取文件
BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream("D:/workspace/text.txt")));
// 输出到另一个文件
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(new FileOutputStream("D:/workspace/ceshi.txt")));
String str = null;
while((str = br.readLine()) != null) {
bw.write(str); // 输出
bw.newLine(); // 换行
bw.flush(); // 清空缓冲区,才能输出
}
br.close();
}
}
说明
1、比较常用的形式如下一行:
BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream("D:/workspace/text.txt")));
上面这一行相当于下面这几行:
File file = new File("D:/workspace/text.txt"); // 打开一个文件
FileInputStream fis = new FileInputStream(file); // 读取字节流
InputStreamReader isr = new InputStreamReader(fis); // 字节流转换成字符流
BufferedReader br = new BufferedReader(isr); // 字符流转换成字符缓冲输入流
2、将字符流转换成字符缓冲输入流,是因为在缓冲区里面读取数据比较快,提高效率。
3、从键盘读入,一般输出:
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
String str = null;
while((str = br.readLine()) != null) {
bw.write(str);
bw.newLine();
bw.flush();
}
br.close();
}
}