Java函数:如何在文件中读写数据?
Java中可以使用File类和IO流来读写文件中的数据。File类可以用来操作文件和文件夹,包括创建文件、重命名、删除等;而IO流可以读写文件中的数据,包括字节流和字符流两种。
一、读取文件中的数据
1、使用字节流读取文件
使用 FileInputStream 类可以读取文件的字节数据,该类的构造方法接受一个 File 实例或文件路径,将文件的内容读入一个字节数组:
import java.io.FileInputStream;
import java.io.IOException;
public class FileReadDemo {
public static void main(String[] args) {
try(FileInputStream fis = new FileInputStream("file.txt");) {
byte[] buffer = new byte[1024];
int len;
while((len = fis.read(buffer)) != -1) {
String content = new String(buffer, 0, len);
System.out.println(content);
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
注意在使用完流对象后需要关闭流,在Java7之后可以使用try-with-resource语句来自动关闭流。
2、使用字符流读取文件
使用 FileReader 类和 BufferedReader 类可以读取文件的字符数据,该类的构造方法接受一个 File 实例或文件路径,逐行读取文件中的数据:
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
public class FileReadDemo {
public static void main(String[] args) {
try(BufferedReader reader = new BufferedReader(new FileReader("file.txt"));) {
String line;
while((line = reader.readLine()) != null) {
System.out.println(line);
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
注意在使用完流对象后需要关闭流,在Java7之后可以使用try-with-resource语句来自动关闭流。同时,使用 BufferedReader 避免了每次读取都生成新的 String 对象。
二、写入数据到文件中
1、使用字节流写入数据
使用 FileOutputStream 类可以向文件中写入字节数据,该类的构造方法接受一个 File 实例或文件路径,通过 write() 方法写入数据:
import java.io.FileOutputStream;
import java.io.IOException;
public class FileWriteDemo {
public static void main(String[] args) {
try(FileOutputStream fos = new FileOutputStream("file.txt");) {
String content = "Hello World!";
byte[] bytes = content.getBytes();
fos.write(bytes);
} catch (IOException e) {
e.printStackTrace();
}
}
}
注意在使用完流对象后需要关闭流,在Java7之后可以使用try-with-resource语句来自动关闭流。
2、使用字符流写入数据
使用 FileWriter 类和 BufferedWriter 类可以向文件中写入字符数据,该类的构造方法接受一个 File 实例或文件路径,通过 write() 方法写入数据:
import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;
public class FileWriteDemo {
public static void main(String[] args) {
try(BufferedWriter writer = new BufferedWriter(new FileWriter("file.txt"));) {
String content = "Hello World!";
writer.write(content);
} catch (IOException e) {
e.printStackTrace();
}
}
}
注意在使用完流对象后需要关闭流,在Java7之后可以使用try-with-resource语句来自动关闭流。同时,使用 BufferedWriter 增加了缓冲功能,避免了每次写入都生成新的字符数组和 String 对象。
三、读写文件常见问题
1、文件路径问题
读取文件或写入数据时需要正确的文件路径。如果文件路径不正确,会抛出 FileNotFoundException 异常。使用相对路径时需要注意当前的工作目录,此时可以使用 System.getProperty("user.dir") 来获取当前的工作目录。
2、文件编码问题
在读写文件时需要注意文件的编码格式。如果编码格式不正确,可能会引起乱码问题。常用的编码格式包括 UTF-8、GBK、ISO-8859-1 等。
3、资源释放问题
在读写文件时需要释放使用完毕的资源,否则可能会导致文件打开错误等问题。可以使用 try-with-resource 语句来自动关闭流,避免资源泄漏。
四、总结
在Java中可以使用 File 类和 IO 流来读写文件中的数据。使用字节流和字符流可以读写文件中的数据,其中 BufferedReader 和 BufferedWriter 可以提高效率。在读写文件时需要注意文件路径、编码格式和资源释放等问题,确保文件读写的正确性。
