Java作为一种大规模应用程序的高级语言,在文件读写方面有着卓越的表现。它为我们提供了许多的读写API可以操作不同类型的文件,比如文本文件,二进制文件、图片等等。在这篇文章中,我们将会详解Java如何进行文件读写操作。
一、Java文件读取
Java文件读取可以分为两种类型:字节流和字符流读取。
1.字节流读取
Java字节流文件读取的主要类主要是FileInputStream和BufferedInputStream,它们可以用于读取二进制文件或其它不包含文本信息的文件。使用字节流读取文件的步骤如下:
- 创建一个FileInputStream或BufferedInputStream对象。
- 创建一个byte数组用于存放要读取的数据。
- 将读取到的数据写入到byte数组中。
- 关闭FileInputStream或BufferedInputStream对象。
下面是一个读取二进制文件的示例代码:
```
public class FileInputDemo {
public static void main(String[] args) {
try {
FileInputStream fis = new FileInputStream("D:/test.txt");
byte[] bytes = new byte[1024];
int len = 0;
while((len = fis.read(bytes)) != -1) {
System.out.println(new String(bytes, 0, len));
}
fis.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
```
注意:在使用字节流读取文件时,需要通过byte数组解析读取到的内容。
2.字符流读取
Java字符流读取主要使用的类有FileReader和BufferedReader。这种方法适用于读取包含中文字符的文本文件。使用字符流读取文件的步骤如下:
- 创建一个FileReader或BufferedReader对象。
- 创建一个String对象用于存放读取到的字符串。
- 将读取到的字符串写入到String对象中。
- 关闭FileReader或BufferedReader对象。
下面是一个读取文本文件的示例代码:
```
public class FileReadDemo {
public static void main(String[] args) {
try {
FileReader fr = new FileReader("D:/test.txt");
BufferedReader br = new BufferedReader(fr);
String line = "";
while((line = br.readLine()) != null) {
System.out.println(line);
}
br.close();
fr.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
```
注意:在使用字符流读取文件时,需要通过BufferedReader的readLine()方法逐行读取文件内容。
二、Java文件写入
Java文件写入同样可以分为两种类型:字节流和字符流写入。
1.字节流写入
在Java中进行字节流写入的主要类为FileOutputStream和BufferedOutputStream,这些类可以被用来写二进制文件或其它不包含文本信息的文件。使用字节流写入文件的步骤如下:
- 创建一个FileOutputStream或BufferedOutputStream对象。
- 将内容写入到OutputStream中。
- 关闭FileOutputStream或BufferedOutputStream对象。
下面是一个字节流写入文件的示例代码:
```
public class FileOutputDemo {
public static void main(String[] args) throws Exception {
String content = "hello, world!!!";
byte[] bytes = content.getBytes();
FileOutputStream fos = new FileOutputStream("D:/test.txt");
fos.write(bytes);
fos.flush();
fos.close();
}
}
```
2.字符流写入
Java字符流写入主要使用的类有FileWriter和BufferedWriter。这种方法适用于写入文本文件,特别是带有中文字符的文本文件。使用字符流写入文件的步骤如下:
- 创建一个FileWriter或BufferedWriter对象。
- 将内容写入到Writer中。
- 关闭FileWriter或BufferedWriter对象。
下面是一个字符流写入文件的示例代码:
```
public class FileWriteDemo {
public static void main(String[] args) {
try {
FileWriter fw = new FileWriter("D:/test.txt");
BufferedWriter bw = new BufferedWriter(fw);
bw.write("hello, world!!!");
bw.flush();
bw.close();
fw.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
```
三、Java文件操作的注意事项
1. 文件路径与文件名
在Java中,使用文件读写的时候,需要指定文件的路径和文件名。路径和文件名之间需要用斜杠(/)或反斜杠(\)分隔,如果使用反斜杠,则需要在反斜杠前再加一个反斜杠,否则会被视为转义字符。如:C:/1.txt 或 C:\1.txt
2. 文件编码
在读写文件的时候,需要考虑文件的编码格式。在Java中,大多数文件使用的都是UTF-8编码格式,但是有也有一些文件使用其他编码格式,例如ANSI编码、GBK编码等等。在输出内容到文件时,最好转换为指定编码:
```
// UTF-8编码
BufferedWriter out = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(file),"UTF-8"));
```
3. 文件大小限制
在读取或写入文件时,需要注意文件大小限制,Java的文件IO操作默认使用的是Java Heap(堆)来存储数据,因此堆大小会限制最大文件大小。如果要读取大文件,请使用内存映射技术或者使用文件流等直接操作I/O。
4. 关闭文件
使用完文件读取时一定要记得关闭流对象,否则可能会导致内存泄漏。
在这里,我们对Java文件读写操作进行了详细的介绍,希望本文能对你掌握Java文件读写操作提供帮助。当然,这只是Java文件操作的基础,Java文件API也非常丰富,我们还可以通过Java NIO(New Input/Output)提供的ByteBuffer、Channel、Selector、FileChannel等NIO的类来实现高效的文件读写操作。