Java是一种流行的编程语言,它有着强大的文件读写能力。本文将带您了解Java文件读写的一些基础知识,并且向您展示Java中文件读写的常见方法、技巧和例子。
## 基础知识
在Java中,反应文件的类是File类。File类的对象可以代表文件和文件夹,可以获取文件信息(如文件名、文件大小等),以及创建、删除、重命名、移动等文件操作。另外,Java中还有I/O流,可以被用来读写数据。InputStream是用于读取数据,OutputStream是用于写数据。Java提供了大量的类来实现文件读写功能,比如BufferedReader、FileReader、BufferedWriter、FileWriter等等。以下是常见的文件读写类的概述和使用。
### 读取文件
对于读取一个文件,最常见的两个类是FileReader和BufferedReader。FileReader类用于读取字符文件,可以根据需要使用read(char[] cbuf)方法读取一个字符数组;BufferedReader类用于带缓存的读取,一次可以读取一行,最常用的方法是readLine()方法。
```java
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
public class ReadFileExample {
public static void main(String[] args) {
File file = new File("example.txt");
try (FileReader fileReader = new FileReader(file);
BufferedReader bufferedReader = new BufferedReader(fileReader)) {
String line;
while ((line = bufferedReader.readLine()) != null) {
System.out.println(line);
}
} catch (IOException e) {
System.out.println("读取文件" + file.getName() + "时出错!");
e.printStackTrace();
}
}
}
```
在上面的例子中,读取example.txt文件的过程中,一次读取一行,然后将读取到的内容打印到控制台。
### 写入文件
对于写如一个文件,最常用的两个类是FileWriter和BufferedWriter。FileWriter类用于写入字符文件,可以使用write(String str)方法来写入字符;BufferedWriter类则是带缓存的写入,一次可以写入一行,最常用的方法是write(String str)和newLine()方法。以下是一个例子:
```java
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
public class WriteFileExample {
public static void main(String[] args) {
File file = new File("example.txt");
try (FileWriter fileWriter = new FileWriter(file);
BufferedWriter bufferedWriter = new BufferedWriter(fileWriter)) {
bufferedWriter.write("Hello World!");
bufferedWriter.newLine();
bufferedWriter.write("This is an example of writing a file.");
} catch (IOException e) {
System.out.println("写入文件" + file.getName() + "时出错!");
e.printStackTrace();
}
}
}
```
在上面的例子中,我们使用了新建文件example.txt并向其写入两行数据的方式进行了文件写入操作。需要注意的是,虽然我们使用了try-with-resources语句,但是我们并没有调用flush()方法,因为在流关闭时该方法会自动调用。
### 追加文件内容
如果需要向一个已存在的文件追加内容,一种简便的方法是使用FileWriter的重载构造器FileWriter(File file, boolean append),append参数设为true来打开外部存储设备(如磁盘)的位置。以下是一个例子:
```java
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
public class AppendFileExample {
public static void main(String[] args) {
File file = new File("example.txt");
try (FileWriter fileWriter = new FileWriter(file, true)) {
fileWriter.write("\nThis is a new line that is appended to the existing file.");
} catch (IOException e) {
System.out.println("追加文件" + file.getName() + "时出错!");
e.printStackTrace();
}
}
}
```
在上面的例子中,我们向example.txt文件追加了一行数据。需要注意的是,我们在fileWriter实例化时使用了true参数,来代表append的值。
## 技巧与方法
Java文件读写是一个非常常用的操作,因此这里列举一些Java文件读写时的技巧与方法,以便于大家能够更加高效地开展工作。
### 使用try-with-resources语句
在Java中,使用try-with-resources语句可以确保程序中的资源(如文件、网络连接等)在使用完毕后被及时关闭。以下是一个例子:
```java
import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
public class ReadFileWithTryWithResourcesExample {
public static void main(String[] args) {
String fileName = "example.txt";
try (BufferedReader br = new BufferedReader(new FileReader(fileName))) {
String line;
while ((line = br.readLine()) != null) {
System.out.println(line);
}
} catch (FileNotFoundException e) {
System.out.println("无法找到文件" + fileName);
e.printStackTrace();
} catch (IOException e) {
System.out.println("读取" + fileName + "文件时出错");
e.printStackTrace();
}
}
}
```
在上面的例子中,我们使用了try-with-resources语句将文件读取流的实例化放在了括号中。当代码块执行完成后,该文件读取流会自动关闭。
### 使用Files.lines()方法
在Java8中,有一个新的Files.lines()方法,可以用于快速读取文件中的内容。该方法会生成一个Stream,使我们可以使用Stream API快速过滤、转化、分类和聚合文件中的数据。
```java
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
public class ReadFileWithFilesLinesExample {
public static void main(String[] args) {
Path path = Paths.get("example.txt");
try {
Files.lines(path).forEach(System.out::println);
} catch (IOException e) {
e.printStackTrace();
}
}
}
```
在上面的例子中,我们使用了Files.lines()方法,将文件中的内容打印到了控制台。
### 使用Java 7新特性
Java7中,引入了一个新的try语句,被称为“try-with-resources”。使用try-with-resources语句时,可以在try语句后添加一对括号,并在括号中声明需要关闭的资源。语法如下:
```java
try (Resource resource = new Resource()) {
// Use resource
} catch (Exception e) {
e.printStackTrace();
}
```
在这里,“Resource”指的是任何特定实现了java.lang.AutoCloseable接口或者java.io.Closeable接口的对象。这个新的try语句将使用资源的实现方法,自动在代码块执行完成后,逆序调用所有资源的close()方法。如下:
```java
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
public class ReadFileWithTryWithResourcesExample {
public static void main(String[] args) {
String fileName = "example.txt";
try (BufferedReader br = new BufferedReader(new FileReader(fileName))) {
String line;
while ((line = br.readLine()) != null) {
System.out.println(line);
}
} catch (IOException e) {
System.out.println("读取" + fileName + "文件时出错");
e.printStackTrace();
}
}
}
```
在这里,BufferedReader不再需要显式地关闭,Java 7的try-with-resources语句会自动关闭它。这样,在try块结束后就不需要显式地关闭资源了。
## 案例说明
### 读取CSV文件
以下是一个读取CSV文件的例子:
1. 创建Student类,用于存储Student对象的信息
```java
public class Student {
private String id;
private String name;
private String address;
public Student(String id, String name, String address) {
this.id = id;
this.name = name;
this.address = address;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
@Override
public String toString() {
return "Student{" +
"id='" + id + '\'' +
", name='" + name + '\'' +
", address='" + address + '\'' +
'}';
}
}
```
2. 创建CSVReader类,实现CSV文件的读取和解析
```java
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
public class CSVReader {
private String filePath;
public CSVReader(String filePath) {
this.filePath = filePath;
}
public List List try (BufferedReader br = new BufferedReader(new FileReader(filePath))) { String line; while ((line = br.readLine()) != null) { String[] values = line.split(","); Student student = new Student(values[0], values[1], values[2]); students.add(student); } } catch (IOException e) { System.out.println("读取" + filePath + "文件时出错"); e.printStackTrace(); } return students; } } ``` 3. 创建测试类,测试CSV文件读取 ```java import java.util.List; public class TestCSVReader { public static void main(String[] args) { CSVReader csvReader = new CSVReader("students.csv"); List for (Student student : students) { System.out.println(student); } } } ``` 在以上的例子中,我们读取了一个具有以下内容的CSV文件: ```csv 001,Alice,Beijing 002,Bob,Shanghai 003,Cathy,Guangzhou 004,David,Shenzhen 005,Emily,Hangzhou ``` 实现了将读取到的数据存储在Student对象中,并使用List将所有Student对象存储起来。 ### 将内容写入到文件 以下是一个将内容写入到文件的例子: ```java import java.io.BufferedWriter; import java.io.FileWriter; import java.io.IOException; public class WriteToFileExample { public static void main(String[] args) { String content = "Hello, World!"; try (BufferedWriter bw = new BufferedWriter(new FileWriter("output.txt"))) { bw.write(content); } catch (IOException e) { System.out.println("写入文件时出错!"); e.printStackTrace(); } } } ``` 在以上例子中,我们将“Hello, World!”写入到了output.txt文件中。需要注意的是,我们使用了try-with-resource语句,确保了程序执行完成后文件会被关闭。 ## 总结 本文介绍了Java中文件读写的基础知识,包含了Java中常见的文件读取和文件写入的方法、技巧和例子。通过本文您可以掌握Java中文件读写的基本操作,包括文件读取的常用方法和陷阱,文件写入时的一些技巧和方法,以及读写CSV文件和将内容写入到文件的案例说明。希望本文能够对您有所帮助! 如果你喜欢我们三七知识分享网站的文章,
欢迎您分享或收藏知识分享网站文章
欢迎您到我们的网站逛逛喔!https://www.37seo.cn/
发表评论 取消回复