我有一个文本文件(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 ();
答案 0 :(得分:0)
JavaScript String对象有一个replace方法,它接受一个可以替换String中字符的正则表达式。但是,JavaScript中的Java无法正常工作,因为您混合了两种语言。
答案 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 ();
所以你遇到的错误是:
对于那些对我如何运行感兴趣的人,在OS X上,使用rhino:
brew install rhino
rhino example.js
我不得不删除println,因为它没有被识别,但这不是一个关键部分。 JS上的JVM。有趣!除了什么都没有异步.....
还有其他JS引擎,但是rhino工作。