ОБНОВЛЕНИЕ: похоже, что system.exit (0) разблокирует файл и позволяет работать второму примеру кода. Как я могу разблокировать файл без вызова system.exit ()?
У меня есть два примера кода. Первый создает базу данных, закрывает соединение, а затем пытается удалить базу данных. Сбой при попытке удалить папку каталога.
Второй пример кода просто удаляет папку. Он работает и является тем же кодом, который использовался в первом примере кода.
Я думаю, что может быть какая-то проблема времени. Хотя соединение закрывается до того, как удаление произойдет в первом примере, мне интересно, если операция удаления не работает из-за некоторого скрытого соединения.
Первый пример кода:
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;
import org.apache.commons.io.FileUtils;
import java.io.*;
public class DBtest{
public static void main(String[] args) {
System.out.print('\u000C');
String db = "test2";
File file = new File(db);
Connection conn = getDB(db);
try{
if (conn != null) conn.close();
System.out.println("connection closed " );
}catch(SQLException e){
System.out.println("connection NOT closed " + e);
System.exit(0);
}
deleteDirectory(file);
System.exit(0);
}
public static boolean deleteDirectory(File directoryToBeDeleted){
File[] allContents = directoryToBeDeleted.listFiles();
if (allContents != null) {
for (File file : allContents) {
deleteDirectory(file);
}
}
directoryToBeDeleted.setWritable(true);
System.out.println(directoryToBeDeleted.toString());
return directoryToBeDeleted.delete();
}
public static Connection getDB(String database) {
try{
/* jdbc:derby specifies the driver to use to connect to the derby database
* database is the name of the database we want to connect to. A database can hold many tables
* create=true is an option that creates and connects to the database if it does not exist,
* or just connect if it already exists.
*/
File db =new File(database);
String URL = "jdbc:derby:" + database + ";create=true";
System.out.println("db exists " + db.exists());
Connection conn = DriverManager.getConnection(URL);
System.out.println("Succesfully connected to " + database);
return conn;
}catch(SQLException e){
System.out.println("FATAL ERROR: from getDB " + e);
return null;
}
}
}
Второй пример кода:
import org.apache.commons.io.FileUtils;
import java.io.*;
public class DirectoryDelete
{
public static void main(String[] args){
System.out.println('\u000C');
File file = new File("test2");
deleteDirectory(file);
}
public static boolean deleteDirectory(File directoryToBeDeleted){
File[] allContents = directoryToBeDeleted.listFiles();
if (allContents != null) {
for (File file : allContents) {
deleteDirectory(file);
}
}
directoryToBeDeleted.setWritable(true);
System.out.println(directoryToBeDeleted.toString());
return directoryToBeDeleted.delete();
}
}
Что мне нужно сделать в первом примере, чтобы освободить папку / файлы, чтобы можно было их удалить?