如何使用FileWriter将文本文件首行移至末尾?(Jar运行时编辑场景)
解决方法:将文本文件首元素移至末尾
看起来你想实现每次运行Jar包时,把list.txt里的第一个图片文件名移到末尾对吧?你的思路方向是对的,但目前的代码有几个关键问题需要调整,我来帮你修正并完善:
现有代码的问题
- 同时读写同一文件导致内容丢失:
FileWriter打开文件时会直接清空原有内容,这时候BufferedReader根本读不到原来的文本。 - 缺少内容处理逻辑:你还没实现拆分元素、移动首元素到末尾的核心逻辑。
- 资源未安全关闭:手动管理流容易忘记关闭,导致资源泄漏。
完整可运行代码
import java.io.BufferedReader; import java.io.FileReader; import java.io.FileWriter; import java.io.IOException; public class FileRotator { public static void main(String[] args) { String filePath = "list.txt"; // 1. 先读取文件中的内容,确保读取完成后再操作写入 String originalLine = ""; try (BufferedReader reader = new BufferedReader(new FileReader(filePath))) { originalLine = reader.readLine(); } catch (IOException e) { System.err.println("读取文件时出错:" + e.getMessage()); return; } // 2. 处理内容:把第一个元素移到末尾 if (originalLine != null && !originalLine.isBlank()) { String[] fileNameParts = originalLine.split(" "); // 只有当元素数量大于1时,移动才有意义 if (fileNameParts.length > 1) { StringBuilder newContent = new StringBuilder(); // 拼接从第二个元素开始的所有内容 for (int i = 1; i < fileNameParts.length; i++) { newContent.append(fileNameParts[i]).append(" "); } // 加上第一个元素,最后去掉多余的空格 newContent.append(fileNameParts[0]).trimToSize(); // 3. 将新内容写回文件 try (FileWriter writer = new FileWriter(filePath)) { writer.write(newContent.toString()); } catch (IOException e) { System.err.println("写入文件时出错:" + e.getMessage()); } } } } }
代码说明
- 分离读写操作:先完成文件读取,拿到原始内容后再打开写入流,避免文件被提前清空。
- 内容处理逻辑:
- 用
split(" ")把一行内容拆分成文件名数组。 - 通过
StringBuilder高效拼接新内容:先加从第二个元素开始的所有项,最后加第一个元素。 - 调用
trimToSize()去掉末尾多余的空格,保证输出格式整洁。
- 用
- 自动资源管理:使用
try-with-resources语法,无需手动关闭流,JVM会自动处理,避免资源泄漏。
额外注意事项
- 如果你的文件名中包含空格,
split(" ")会拆分错误,这时候建议改用其他分隔符(比如逗号)或者更复杂的解析逻辑。 - 如果文件有多行内容,你需要调整读取逻辑,遍历所有行并处理,但根据你的描述,文件应该只有一行内容,所以当前代码足够。
内容的提问来源于stack exchange,提问作者Meowminator
相关产品推荐
相关产品推荐

