任何人都可以告诉我如何在打开并加载到数据库后删除目录中的文件?
这是我的代码:
public static void main(String[] args) throws SQLException{
int Count= 0;
File directory = new File("C://Documents and Settings//welcome//My Documents//Bluetooth Exchange Folder");
directory.deleteOnExit();
File files[] = directory.listFiles();
for(int index = 0; index < files.length; index++){
try {
FileReader inp = new FileReader (files[index]);
BufferedReader buf = new BufferedReader(inp);
String strLine;
try {
while ((strLine = buf.readLine()) != null)
{
System.out.println(strLine);
String[] dbColumnValues = strLine.split("%");
Connect.DoInsertIntoDB(Long.parseLong(dbColumnValues[0]),dbColumnValues[1],dbColumnValues[2], dbColumnValues[3]);
Count++;
System.out.println(Count + " Row(s) are inserted into the Database");
GenHTML.gen();
}
}
但是目录中的文件不会被删除。 请问任何人都可以纠正我的代码中的错误吗?
[目前,我正在测试目录中的3个文件。每个文件加载到数据库后,我希望从目录中删除每个文件。]
提前致谢!
答案 0 :(得分:4)
最好在代码中明确。
File files[] = directory.listFiles();
for(int index = 0; index < files.length; index++){
{
// Process files[index]
// ...
boolean wasDeleted = files[index].delete();
if (!wasDeleted)
{
// Deal with error
}
}
此外,您需要在完成文件句柄后关闭它们
FileReader inp = new FileReader (files[index]);
try
{
// ...
}
finally
{
inp.close();
}
答案 1 :(得分:1)
File.delete()
和File.deleteOnExit()
方法只会在目录为空时删除目录。在处理目录时,您必须从目录中删除文件(并确保没有子目录)。或者,您可以在处理结束时使用FileUtils.deleteDirectory()
中的Apache Commons IO。
答案 2 :(得分:0)
双斜线似乎令人怀疑。使用单个反斜杠,您需要引用\\
,或使用单个斜杠/
。
此外,您可以尝试使用delete()
,然后方法返回而不是deleteOnExit()
。
答案 3 :(得分:0)
答案 4 :(得分:0)
您无法删除目录,除非该目录为空。如果目录不为空,则必须首先递归删除目录中的所有文件和子目录。
所以directory.deleteOnExit()在你的情况下不起作用。
更多,我建议您明确删除文件,而不是使用deleteOnExit()。如果与文件相关的所有输入/输出流都不是关闭,则它是一个不会在退出时删除文件的哑函数。始终关闭流并明确删除文件,然后删除目录。
答案 5 :(得分:0)
您可能需要做的是对打开文件的组件使用dispose()方法。可能的情况是该文件仍然被打开并被打开的组件锁定,因此您必须确保使用dispose()
方法来解决该问题。