You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用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());
                }
            }
        }
    }
}

代码说明

  1. 分离读写操作:先完成文件读取,拿到原始内容后再打开写入流,避免文件被提前清空。
  2. 内容处理逻辑:
    • 用split(" ")把一行内容拆分成文件名数组。
    • 通过StringBuilder高效拼接新内容:先加从第二个元素开始的所有项,最后加第一个元素。
    • 调用trimToSize()去掉末尾多余的空格,保证输出格式整洁。
  3. 自动资源管理:使用try-with-resources语法,无需手动关闭流,JVM会自动处理,避免资源泄漏。

额外注意事项

  • 如果你的文件名中包含空格,split(" ")会拆分错误,这时候建议改用其他分隔符(比如逗号)或者更复杂的解析逻辑。
  • 如果文件有多行内容,你需要调整读取逻辑,遍历所有行并处理,但根据你的描述,文件应该只有一行内容,所以当前代码足够。

内容的提问来源于stack exchange,提问作者Meowminator

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 08:25:22