题目:设定文件file1内容:年级,班级,学号,姓名分为四行。
读取文件file1中的内容,若其字符<=3个将其转入file2,如若是字符>3个转入file3
代码如下
import java.io.*;
import java.nio.file.*;
import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.ArrayList;
import java.util.List;public class FileSplitter {public static void main(String[] args) {String inputFilePath = "file1.txt";String outputFilePathShort = "file2.txt";String outputFilePathLong = "file3.txt";// 检查并可能创建输入文件Path inputPath = Paths.get(inputFilePath);if (!Files.exists(inputPath)) {try {// 创建一个空文件,或者你可以选择不创建并提示用户Files.createFile(inputPath);System.out.println("Created empty input file: " + inputFilePath);// 这里可以选择是否立即写入一些默认内容到输入文件// 或者简单地留空,让用户在程序运行前手动添加内容} catch (IOException e) {System.err.println("Error creating input file: " + inputFilePath + " - " + e.getMessage());return;}}List<String> lines = new ArrayList<>();try (BufferedReader reader = new BufferedReader(new FileReader(inputFilePath, StandardCharsets.UTF_8))) {String line;while ((line = reader.readLine()) != null) {lines.add(line);}} catch (IOException e) {System.err.println("Error reading the input file: " + inputFilePath + " - " + e.getMessage());return;}// 写入输出文件,这些文件如果不存在会被自动创建try (BufferedWriter writerShort = new BufferedWriter(new FileWriter(outputFilePathShort, StandardCharsets.UTF_8, false));BufferedWriter writerLong = new BufferedWriter(new FileWriter(outputFilePathLong, StandardCharsets.UTF_8, false))) {for (String line : lines) {if (line.length() <= 3) {writerShort.write(line);writerShort.newLine();} else {writerLong.write(line);writerLong.newLine();}}System.out.println("Files have been written successfully.");} catch (IOException e) {System.err.println("Error writing to output files: " + e.getMessage());}}
}
解析:如果空文件File1,2,3不存在,将会自动进行创建,但是需要手动添加自己的年级&班级&学号&姓名,第一次运行文件将会实现
“System.out.println("Created empty input file: " + inputFilePath);”
txt文件的位置位于项目根目录中,添加后可再次运行文件,实现数据转入,如下图所示
自上到下分别是File1,2,3.
如果您还有更好且更便捷的方法,欢迎在评论区提出自己的想法
(我本想在List.of()
方法来创建一个包含四行固定内容的列表。但是这样会使得代码过于繁琐,在课堂测试这种限定时间的活动中恐怕不适合使用)