欢迎访问宙启技术站
智能推送

如何使用Java函数读写文件并进行相关操作

发布时间:2023-06-10 14:04:22

在Java中,文件的读写操作常常使用Java I/O流来进行,以达到对文件的读写控制。以下是文件的读写最基本的示例:

### 文件读取

import java.io.*;

public class ReadFile {
    public static void main(String[] args) {
        File file = new File("text.txt");
        try {
            FileReader fileReader = new FileReader(file);
            BufferedReader bufferedReader = new BufferedReader(fileReader);

            String line;
            while ((line = bufferedReader.readLine()) != null) {
                System.out.println(line);
            }

            bufferedReader.close();
            fileReader.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

上述示例中首先创建File对象来代表要读取的文件,使用FileReader和BufferedReader来进行文本文件的读取操作。在读取时使用while循环,逐行读取文件的数据,直到读到文件末尾为止。最后记得关闭文件流。

### 文件写入

import java.io.*;

public class WriteFile {
    public static void main(String[] args) {
        File file = new File("text.txt");
        try {
            FileWriter fileWriter = new FileWriter(file);
            BufferedWriter bufferedWriter = new BufferedWriter(fileWriter);
            String fileContent = "Hello Java!";
            bufferedWriter.write(fileContent);
            bufferedWriter.flush();
            bufferedWriter.close();
            fileWriter.close();
            System.out.println("File has been written.");
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

这个示例展示了如何向文本文件中写入数据。首先创建File对象来指示文件,之后使用FileWriter和BufferedWriter进行文件写入操作。在写入数据后使用flush()方法来清空输出缓存区,最后关闭文件流。

### 二进制文件读写

二进制文件一般不像文本文件那么容易解释和读取,因此需要采用字节流来进行读取操作。

import java.io.*;

public class BinaryFileReading {
    public static void main(String[] args) {
        String filePath = "test.jpg";
        try {
            File file = new File(filePath);
            FileInputStream fis = new FileInputStream(file);
            byte[] data = new byte[(int) file.length()];
            fis.read(data);
            fis.close();
            System.out.println("File has been read.");
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

注意,byte数组的长度应该等于文件的长度,因为read()方法一次性读取文件的所有内容,并将它们存储在byte数组中。

import java.io.*;

public class BinaryFileWriting {
    public static void main(String[] args) {
        String filePath = "test.jpg";
        try {
            File file = new File(filePath);
            FileOutputStream fos = new FileOutputStream(file);
            byte[] data = {0, 1, 2, 3, 4, 5};
            fos.write(data);
            fos.flush();
            fos.close();
            System.out.println("File has been written.");
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

通过使用FileOutputStream和write()方法,读写二进制文件的方式类似于文本文件。

### 对文件进行追加或截取操作

经常需要对文件进行追加和截取操作。例如,某些系统日志可能需要追加操作,因为日志条目会随时增加。同样,如果需要修改已有的文件,就需要截取操作。

import java.io.*;

public class AppendFile {
    public static void main(String[] args) {
        try (FileWriter fileWriter = new FileWriter("log.txt", true);
              BufferedWriter bufferedWriter = new BufferedWriter(fileWriter);
              PrintWriter writer = new PrintWriter(bufferedWriter)) {
            writer.println("Log entry #1.");
            writer.println("Log entry #2.");
            System.out.println("The log has been appended.");
        } catch (IOException e) {
            System.err.println("Caught IOException: " + e.getMessage());
        }
    }
}

在上述示例中,传递给FileWriter构造函数的第二个参数为true,表示文件追加。PrintWriter的println()方法用于向日志文件中添加新的条目。

import java.io.*;

public class TruncateFile {
    public static void main(String[] args) {
        File file = new File("log.txt");
        try (RandomAccessFile raf = new RandomAccessFile(file, "rw");) {
            raf.setLength(0);
            System.out.println("The file has been truncated.");
        } catch (IOException e) {
            System.err.println("Caught IOException: " + e.getMessage());
        }
    }
}

在这个示例中,使用RandomAccessFile,设置它的长度为0可以将文件截断。