如何在Java中使用字符流与字节流进行文件IO操作
在Java中,有两种常见的文件IO操作方式:字符流和字节流。字符流适用于读取或写入文本文件,而字节流适用于读取或写入任何类型的文件。
一、字符流
字符流是用于读取或写入文本文件的IO流,在Java中有两个主要的字符流:Reader和Writer。
1. Reader
Reader是用于读取字符流的抽象类,它的常见子类有FileReader、InputStreamReader等。
FileReader用于读取本地磁盘上的文本文件,例如:
try {
FileReader reader = new FileReader("sample.txt");
int ch;
while ((ch = reader.read()) != -1) {
System.out.print((char) ch);
}
reader.close();
} catch (IOException e) {
e.printStackTrace();
}
InputStreamReader用于读取字节流并将其转换为字符流。例如:
try {
FileInputStream fis = new FileInputStream("sample.txt");
InputStreamReader isr = new InputStreamReader(fis, "UTF-8");
int ch;
while ((ch = isr.read()) != -1) {
System.out.print((char) ch);
}
isr.close();
} catch (IOException e) {
e.printStackTrace();
}
2. Writer
Writer是用于写入字符流的抽象类,它的常见子类有FileWriter、OutputStreamWriter等。
FileWriter用于向本地磁盘上的文本文件中写入数据,例如:
try {
FileWriter writer = new FileWriter("sample.txt");
writer.write("Hello, world!");
writer.close();
} catch (IOException e) {
e.printStackTrace();
}
OutputStreamWriter用于写入字节流,并将其转换为字符流。例如:
try {
FileOutputStream fos = new FileOutputStream("sample.txt");
OutputStreamWriter osw = new OutputStreamWriter(fos, "UTF-8");
osw.write("Hello, world!");
osw.close();
} catch (IOException e) {
e.printStackTrace();
}
二、字节流
字节流是用于读取或写入任何类型的文件的IO流,在Java中有两个主要的字节流:InputStream和OutputStream。
1. InputStream
InputStream是用于读取字节流的抽象类,它的常见子类有FileInputStream、ByteArrayInputStream等。
FileInputStream用于读取本地磁盘上的文件,例如:
try {
FileInputStream fis = new FileInputStream("sample.bin");
int ch;
while ((ch = fis.read()) != -1) {
System.out.print(ch + " ");
}
fis.close();
} catch (IOException e) {
e.printStackTrace();
}
ByteArrayInputStream用于从内存中读取数据,例如:
try {
byte[] data = new byte[]{65, 66, 67, 68, 69};
ByteArrayInputStream bis = new ByteArrayInputStream(data);
int ch;
while ((ch = bis.read()) != -1) {
System.out.print((char) ch + " ");
}
bis.close();
} catch (IOException e) {
e.printStackTrace();
}
2. OutputStream
OutputStream是用于写入字节流的抽象类,它的常见子类有FileOutputStream、ByteArrayOutputStream等。
FileOutputStream用于向本地磁盘上的文件中写入数据,例如:
try {
FileOutputStream fos = new FileOutputStream("sample.bin");
byte[] data = new byte[]{65, 66, 67, 68, 69};
fos.write(data);
fos.close();
} catch (IOException e) {
e.printStackTrace();
}
ByteArrayOutputStream用于将数据写入内存中,例如:
try {
ByteArrayOutputStream bos = new ByteArrayOutputStream();
byte[] data = new byte[]{65, 66, 67, 68, 69};
bos.write(data);
byte[] result = bos.toByteArray();
System.out.println(Arrays.toString(result));
bos.close();
} catch (IOException e) {
e.printStackTrace();
}
总结:
Java中的文件IO操作涉及到了字符流和字节流两种方式,具体使用哪种方式取决于文件的类型和需要进行的操作类型。上述的代码示例可以帮助开发者们实现文件的读取和写入操作,但是要注意关闭流,否则会引起资源泄露等问题。
