使用Java方法更新文本文件上的单行

时间:2015-03-14 22:20:01

标签: java

我知道以前的问题就像这个问题一样,但是这个问题与我编写的代码的细节有关。我正在尝试更新文件上的单行代码,即使程序终止也会永久更新,以便可以再次启动数据。我正在编写的方法看起来像这样(没有在eclipse中找到编译错误)

public static void editLine(String fileName, String name, int element,
            String content) throws IOException {
        try {
            // Open the file specified in the fileName parameter.
            FileInputStream fStream = new FileInputStream(fileName);
            BufferedReader br = new BufferedReader(new InputStreamReader(
                    fStream));
            String strLine;
            StringBuilder fileContent = new StringBuilder();

            // Read line by line.
            while ((strLine = br.readLine()) != null) {
                String tokens[] = strLine.split(" ");
                if (tokens.length > 0) {
                    if (tokens[0].equals(name)) {
                        tokens[element] = content;
                        String newLine = tokens[0] + " " + tokens[1] + " "
                                + tokens[2];
                        fileContent.append(newLine);
                        fileContent.append("\n");
                    } else {
                        fileContent.append(strLine);
                        fileContent.append("\n");
                    }
                }

                /*
                 * File Content now has updated content to be used to override
                 * content of the text file
                 */
                FileWriter fStreamWrite = new FileWriter(fileName);
                BufferedWriter out = new BufferedWriter(fStreamWrite);
                out.write(fileContent.toString());
                out.close();

                // Close InputStream.
                br.close();
            }
        } catch (IOException e) {
            System.out.println("COULD NOT UPDATE FILE!");
            System.exit(0);
        }
    }

如果你能查看代码并让我知道你会建议什么,这将是非常好的,因为目前我只收到我的捕获信息。

1 个答案:

答案 0 :(得分:1)

好。首先,StringBuilder fileContent = new StringBuilder();是不好的做法,因为这个文件可能比用户的可用内存大。您根本不应该将大部分文件保留在内存中。通过读入缓冲区,处理缓冲区(必要时调整缓冲区)以及将缓冲区写入新文件来完成此操作。完成后,删除旧文件并将辅助文件重命名为旧文件名。希望这会有所帮助。