我创建了一些临时使用的文件,并将它们用作某些方法的输入.我打电话给
deleteOnExit()
在我创建的所有文件上.但仍有一个档案.
我假设这是因为文件仍然在使用,但编译器只在当前行完成后才进入下一行?(单线程)
虽然实际上由于java覆盖不是问题,但总是只有一个文件.我想了解它为什么会发生,如果我可以使用的话
Thread.sleep(sometime);
编辑:-
File x = new file("x.txt");
new class1().method1();
创建所有文件(5)后,我刚添加了这一行
x.deleteOnExit(); y.deletOnExit() and so on...
删除除最后一个文件之外的所有文件.
最佳答案
确保关闭正在写入文件的任何流.如果流未关闭,则文件将被锁定,删除将返回false.这是我遇到的一个问题.希望这会有所帮助.
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.StringWriter;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
public class Test {
public static void main(String[] args) {
File reportNew = null;
File writeToDir = null;
BufferedReader br = null;
BufferedWriter bw = null;
StringWriter sw = null;
List fileList = new ArrayList();
SimpleDateFormat ft = new SimpleDateFormat("yyyymmdd_hh_mm_ss_ms");
try {
//Read report.new file
reportNew = new File("c:\temp\report.new");
//Create temp directory for newly created files
writeToDir = new File("c:\temp");
//tempDir.mkdir();
//Separate report.new into many files separated by a token
br = new BufferedReader(new FileReader(reportNew));
sw = new StringWriter();
new StringBuilder();
String line;
int fileCount = 0;
while (true) {
line=br.readLine();
if (line == null || line.contains("%PDF")) {
if (!sw.toString().isEmpty()) {
fileCount++;
File _file = new File(writeToDir.getPath()
+ File.separator
+ fileCount
+ "_"
+ ft.format(new Date())
+ ".htm");
_file.deleteOnExit();
fileList.add(_file);
bw = new BufferedWriter(new FileWriter(_file));
bw.write(sw.toString());
bw.flush();
bw.close();
sw.getBuffer().setLength(0);
System.out.println("File "
+ _file.getPath()
+ " exists "
+ _file.exists());
}
if (line == null)
break;
else
continue;
}
sw.write(line);
sw.write(System.getProperty("line.separator"));
}
} catch ( Exception e) {
e.printStackTrace();
} finally {
if (bw != null) {
try {
bw.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}