使用Java替换文本文件中的字符串

时间:2014-08-13 23:44:32

标签: java

我有一个文本文件(file.txt),其中包含多行:

/location/test/file.csv
/location/test1/file2.csv
/location/test2/file.exe

使用ECMA,我想替换" /"的所有实例。用" \"。但是,下面的代码只替换第一行并删除第2行和第3行。

这是运行代码后file.txt文件的结果(正如我所说,缺少第2行和第3行):

\location\test\file.csv

有人可以帮忙吗?

function ReadFile ()
{
var file = new java.io.BufferedReader(new java.io.FileReader("C:\\Test\\file.txt"));
var fileWriter = new java.io.FileWriter("C:\\Test\\file.txt",false);
while ((line = file.readLine()) != null) 
 {
println(line);
if (line.contains ("/"))
line = line.replace("/","\\");

fileWriter.write(line);
fileWriter.close();
 }
} 
ReadFile ();

3 个答案:

答案 0 :(得分:0)

JavaScript String对象有一个replace方法,它接受一个可以替换String中字符的正则表达式。但是,JavaScript中的Java无法正常工作,因为您混合了两种语言。

http://www.w3schools.com/jsref/jsref_replace.asp

答案 1 :(得分:0)

问题是,当您正在阅读文件时,您正在对该文件进行书写,因此只要您的第一次写入(行)完成,该文件就不再具有接下来的两行。在您完成文件处理之前,使用第二个临时文件写入,或者将所有新行的列表/数组保留在内存中,然后在最后写出文件。

但是,我真的很想知道你是如何设法使你当前的程序运行的。根据我的经验,Java和ECMA / Javascript是两种完全独立的语言,但看起来你正在使用javascript代码来对抗Java库。那是什么?

答案 2 :(得分:0)

所以我设法使用Rhino运行此代码。它实际上确实运行。我对文件名进行了一些更改,以便让它在我的Mac上运行,但它本质上是相同的代码:

function ReadFile () {
  var file = new java.io.BufferedReader(new java.io.FileReader("file"));
  var fileWriter = new java.io.FileWriter("file2",false);
  while ((line = file.readLine()) != null) {
    if (line.contains ("/"))
      line = line.replace("/","\\");

    fileWriter.write(line + "\n");
 }
 fileWriter.close();
 file.close();
}
ReadFile ();

所以你遇到的错误是:

  1. 读取和写入同一文件。使用流这很尴尬。基本上,不要这样做。我把它改成了写入file2。
  2. 在读者循环中关闭作家。最后关闭作者,一旦关闭,你就不能再写它了。
  3. 不关闭您正在阅读的文件。
  4. 对于那些对我如何运行感兴趣的人,在OS X上,使用rhino:

    brew install rhino
    rhino example.js
    

    我不得不删除println,因为它没有被识别,但这不是一个关键部分。 JS上的JVM。有趣!除了什么都没有异步.....

    还有其他JS引擎,但是rhino工作。