java 实现文件读写操作

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 readStudentsFromCSV() {

List students = new ArrayList<>();

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 students = csvReader.readStudentsFromCSV();

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/

点赞(100) 打赏

评论列表 共有 0 条评论

暂无评论
立即
投稿
发表
评论
返回
顶部