我正在使用java
,maven
和cucumber
进行测试。这是我的步骤定义。文件test.txt
在src/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
中,我通过多次运行测试用例编写了多行数据。这条路对吗?
当我运行测试用例时,我应该在resources
或target
的文件中写入数据吗?
如何将数据附加到已经存在的maven
和java
文件中?
无论你在target
中写什么都是暂时的,并且会被下一个mvn clean
删除-这就是为什么它被删除的答案。现在,如果您希望该文件用于测试目的,它只会作为副作用产生,并且之后不需要保留该文件,则可以将其放在目标下,但是如果您想收集一些报告或保留数据,则应该将其放在目标外。
为什么在target下生成?因为maven编译你的java源代码并将所有类放在该文件夹下,然后它使用它作为运行时类路径,所以任何生成的东西,如果它没有绝对路径,将相对于该位置生成。
这条线
getClass().getResource("/test.txt")
表示-获取当前类及其位置并在该位置下创建一个文件。当然,这个类是在target/test-classes
目录下的所以你的文件就会在target/test-classes/test.txt
目录下
为了将文本附加到文件中,您需要将文件打开为追加模式,您可以使用FileWriter来完成,有一个特殊的构造函数,该构造函数接受布尔参数以追加模式打开文件。
我可以看到在else块中你没有调用FileWriter构造函数带参数true,这需要以追加模式打开文件
在java
中向文件追加文本的步骤- 使用FileWriter在附加模式下打开您想要附加文本的文件,通过传递true
- 如果你要写大文本,将FileWriter包装成BufferedReader
- 换行printwwriter
- 关闭最后块中的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
}
}