Java, Maven - file覆盖数据而不是追加数据



我正在使用java,mavencucumber进行测试。这是我的步骤定义。文件test.txtsrc/test/resources中。文件为空

public void store_ids() {
String id = currentScenarioData.scenarioContext.getScenarioContext("ID").toString();
try{
String savestr = getClass().getResource("/test.txt").getFile().toString();
System.out.println("::: savestr :::" + savestr);
File intentFile = new File(savestr);
FileWriter fw = new FileWriter(intentFile, true);
BufferedWriter bw = new BufferedWriter(fw);
PrintWriter out = new PrintWriter(bw);
if ( intentFile.isFile() && !intentFile.isDirectory() ) {
System.out.println("::: FILE EXISTS :::"); // this works
out.println(id + "n");
}
else {
fw = new FileWriter(intentFile);
}
out.close();
} catch (Exception e) {
System.out.println(e);
}
}

当我使用mvn clean verify运行测试用例时,文件test.txt位于target/test-classes,并且它总是被新数据覆盖。原src/test/resources处的文件为空。

如果我多次运行相同的测试用例,那么我应该在文件中写入多行数据。但是文件中的数据总是被覆盖,并且只有一个ID写入文件。

我认为问题是target/test-classes被删除并再次创建,当我运行mvn clean verify我如何避免这种情况?

是的,没有clean运行mvn,将文件保存在target/test-classes中,我通过多次运行测试用例编写了多行数据。这条路对吗?

当我运行测试用例时,我应该在resourcestarget的文件中写入数据吗?

如何将数据附加到已经存在的mavenjava文件中?

无论你在target中写什么都是暂时的,并且会被下一个mvn clean删除-这就是为什么它被删除的答案。现在,如果您希望该文件用于测试目的,它只会作为副作用产生,并且之后不需要保留该文件,则可以将其放在目标下,但是如果您想收集一些报告或保留数据,则应该将其放在目标外。

为什么在target下生成?因为maven编译你的java源代码并将所有类放在该文件夹下,然后它使用它作为运行时类路径,所以任何生成的东西,如果它没有绝对路径,将相对于该位置生成。

这条线

getClass().getResource("/test.txt")

表示-获取当前类及其位置并在该位置下创建一个文件。当然,这个类是在target/test-classes目录下的所以你的文件就会在target/test-classes/test.txt目录下

为了将文本附加到文件中,您需要将文件打开为追加模式,您可以使用FileWriter来完成,有一个特殊的构造函数,该构造函数接受布尔参数以追加模式打开文件。

我可以看到在else块中你没有调用FileWriter构造函数带参数true,这需要以追加模式打开文件

在java

中向文件追加文本的步骤
  1. 使用FileWriter在附加模式下打开您想要附加文本的文件,通过传递true
  2. 如果你要写大文本,将FileWriter包装成BufferedReader
  3. 换行printwwriter
  4. 关闭最后块中的FileWriter以避免泄漏文件描述符

试试这个代码(JAVA6);

FileWriter fw = null;
BufferedWriter bw = null; 
PrintWriter pw = null;
try { 
fw = new FileWriter("<path-to-file>", true); 
bw = new BufferedWriter(fw); 
pw = new PrintWriter(bw); 
pw.println("Shane");
pw.println("Root");
pw.println("Ben");
System.out.println("Data Successfully appended into file");
pw.flush(); 
} 
finally { 
try { 
pw.close();
bw.close(); 
fw.close(); 
} 
catch (IOException io) {// can't do anything 
}
}

相关内容

  • 没有找到相关文章

最新更新