修改文件使用Java的内容(Modify the content of a file using J

2019-06-21 16:23发布

我想用下面的Java程序删除文件的某些内容。 这是在同一个文件替换写入方法或者它应该被复制到另一个文件。

但其删除文件的所有内容。

class FileReplace
{
    ArrayList<String> lines = new ArrayList<String>();
    String line = null;
    public void  doIt()
    {
        try
        {
            File f1 = new File("d:/new folder/t1.htm");
            FileReader fr = new FileReader(f1);
            BufferedReader br = new BufferedReader(fr);
            while (line = br.readLine() != null)
            {
                if (line.contains("java"))
                    line = line.replace("java", " ");
                lines.add(line);
            }
            FileWriter fw = new FileWriter(f1);
            BufferedWriter out = new BufferedWriter(fw);
            out.write(lines.toString());
        }
        catch (Exception ex)
        {
            ex.printStackTrace();
        }
    }
    public statc void main(String args[])
    {
        FileReplace fr = new FileReplace();
        fr.doIt();
    }
}

Answer 1:

我会关闭的读者,和冲洗器开始:

public class FileReplace {
    List<String> lines = new ArrayList<String>();
    String line = null;

    public void  doIt() {
        try {
            File f1 = new File("d:/new folder/t1.htm");
            FileReader fr = new FileReader(f1);
            BufferedReader br = new BufferedReader(fr);
            while ((line = br.readLine()) != null) {
                if (line.contains("java"))
                    line = line.replace("java", " ");
                lines.add(line);
            }
            fr.close();
            br.close();

            FileWriter fw = new FileWriter(f1);
            BufferedWriter out = new BufferedWriter(fw);
            for(String s : lines)
                 out.write(s);
            out.flush();
            out.close();
        } catch (Exception ex) {
            ex.printStackTrace();
        }
    }

    public static void main(String args[]) {
        FileReplace fr = new FileReplace();
        fr.doIt();
    }
}


Answer 2:

接受的答案是伟大的。 但是,使用Apache的替换文件中的内容更简单的方法commons-io库( commons-io-2.4.jar -你可以使用任何最新版本)

private void update() throws IOException{
        File file = new File("myPath/myFile.txt");
        String fileContext = FileUtils.readFileToString(file);
        fileContext = fileContext.replaceAll("_PLACEHOLDER_", "VALUE-TO-BE-REPLACED");
        FileUtils.write(file, fileContext);
 }

注:时抛出IOException需要被捕获并应用相应的处理。



Answer 3:

读+写同一个文件simulatenously也不行。

编辑:改变措辞,并更正确,更具体 - 读取和写入同一个文件,在同一个线程,没有正确关闭的读者(和flusing作家)也不行。



Answer 4:

确保:

  • close任何流,当你不再需要他们
  • 特别是重新打开它进行写入。
  • truncate该文件,以确保如果你写不到它有它收缩。
  • 然后写入输出
  • 写个人的线条,不靠toString
  • flushclose ,当你写完!

如果您使用缓冲 IO,你总是要确保缓冲区在年底刷新,或可能造成数据丢失!



Answer 5:

我可以看到三个问题。

首先你写out ,我认为是System.out的,而不是一个输出流的文件。

其次,如果你写的输出流的文件,你需要关闭它。

三, toString()上的方法ArrayList是不会写的文件中像你期望。 遍历列表,并写出每个String每次一个。 问问自己,你是否需要写换行符也是如此。



Answer 6:

接受的答案是稍有不妥。 下面是正确的代码。

    public class FileReplace {
List<String> lines = new ArrayList<String>();
String line = null;

public void  doIt() {
    try {
        File f1 = new File("d:/new folder/t1.htm");
        FileReader fr = new FileReader(f1);
        BufferedReader br = new BufferedReader(fr);
        while ((line = br.readLine()) != null) {
            if (line.contains("java"))
                line = line.replace("java", " ");
            lines.add(line);
        }
        fr.close();
        br.close();

        FileWriter fw = new FileWriter(f1);
        BufferedWriter out = new BufferedWriter(fw);
        for(String s : lines)
             out.write(s);
        out.flush();
                } 
        out.close();
   catch (Exception ex) {
        ex.printStackTrace();
    }
}


文章来源: Modify the content of a file using Java