Java2 IO处理
Java使用流来处理数据的输入输出,主要借助于包java.io来实现,流是指计算机各部件之间的数据流动。
分类:
按数据传输方向:输入流和输出流
按内容:字节流和字符流
Q:为什么采用数据流处理输入输出?
A:使程序的输入输出操作独立于相关设备,每个设备的实现细节由系统完成,源代码不需要做修改,增加可移植性
输入输出流
字节流(一次读8位):InputStream, OutputStream
常用于读写图片、音频、视频等二进制数据
字符流(一次读16位):Reader,Writer
一般用来处理文本文件
以上的类均为抽象类,使用他们的不同子类(对应不同的I/O设备)
字节流使用例子
// FileInputStream and FileOutputStream
package src;
import java.io.*;
public class Main {
public static void main(String[] args) {
char ch;
try (
FileInputStream fin = new FileInputStream(FileDescriptor.in);
FileOutputStream fout = new FileOutputStream("src\\testFileIOStream.txt");
) {
while ((ch = (char) fin.read()) != '\n') {
fout.write(ch);
}
} catch (IOException e) {
e.printStackTrace();
}
try (
FileInputStream fin = new FileInputStream("src\\testFileIOStream.txt");
FileOutputStream fout = new FileOutputStream(FileDescriptor.out);
) {
while (fin.available() > 0) {
fout.write(fin.read());
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
123abc // keyboard input
123abc // screen output
Process finished with exit code 0
// FilterInputStream 和 FilterOutputStream 的子类对象可以读取指定类型多字节的数
package src;
import java.io.*;
public class Main {
public static void main(String[] args) {
try (
FileOutputStream fout = new FileOutputStream("src\\testFileIOStream.txt");
) {
fout.write(0);
fout.write(0);
fout.write(1); // 256
fout.write(3); // 3
fout.write(0);
fout.write(66); // char B
} catch (IOException e) {
e.printStackTrace();
}
try (
DataInputStream din = new DataInputStream(
new FileInputStream("src\\testFileIOStream.txt"));
) {
System.out.println(din.readInt()); // output -> 259
while (din.available() > 0) {
System.out.println(din.readChar()); // read two bytes output -> B
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
标准输入输出流System.in, System.out, System.err的用法类似。
// BufferedReader and BufferedWriter
package src;
import java.io.*;
public class Main {
public static void main(String[] args) {
String line;
try (
BufferedReader in = new BufferedReader(new FileReader("src\\src\\testin.txt"));
BufferedWriter out = new BufferedWriter(new FileWriter("src\\src\\testout.txt"));
) {
while ((line = in.readLine()) != null) {
out.write(line);
}
out.flush();
} catch (IOException e) {
e.printStackTrace();
}
}
}
字节流使用例子
Output:因为readline()返回的结果不包括换行符所以显示如下。