Найти путь во время выполнения, чтобы удалить файл - PullRequest
0 голосов
/ 20 декабря 2010

Код в основном позволяет пользователю вводить имя файла, который он хотел бы удалить, который содержится в переменной «catName», а затем выполняется следующий код, чтобы попытаться найти путь к файлу и удалить его. , Тем не менее, он не работает, так как не удаляет файл таким образом. Однако удаляет ли файл файл, если я ввел весь путь.

File file = new File(catName + ".txt");
String path = file.getCanonicalPath();
File filePath = new File(path);
filePath.delete(); 

Ответы [ 3 ]

1 голос
/ 20 декабря 2010

Если вы удаляете файлы в том же каталоге, в котором выполняется программа, вам не нужно указывать путь, но если он не находится в том же каталоге, в котором выполняется ваша программа, и вы ожидаете, что программаузнать, в каком каталоге находится ваш файл, этого не произойдет.

Что касается вашего кода выше: все следующие примеры делают одно и то же.Давайте предположим, что ваш путь - / home / kim / files, и именно там вы запустили программу.

// deletes /home/kim/files/somefile.txt
boolean result = new File("somefile.txt").delete();

// deletes /home/kim/files/somefile.txt
File f = new File("somefile.txt");
boolean result = new File(f.getCanonicalPath()).delete();

// deletes /home/kim/files/somefile.txt
String execPath = System.getProperty("user.dir");
File f = new File(execPath+"/somefile.txt");
f.delete();

Другими словами, вам нужно указать путь, по которому находятся удаляемые файлы.Если они расположены в разных и изменяющихся местах, вам придется выполнить поиск файловой системы в вашей файловой системе, что может занять много времени, если это большая файловая система. Вот статья о том, как это реализовать.

0 голосов
/ 20 декабря 2010

Предоставленный вами фрагмент кода можно сжать следующим образом:

boolean success = new File(catName + ".txt").delete();

Переменная success будет иметь значение true, если удаление было успешным.Если вы не укажете полный абсолютный путь (например, C:\Temp\test для файла C:\Temp\test.txt), ваша программа будет считать, что путь указан относительно текущего рабочего каталога - обычно это каталог, из которого он был запущен.

Вы должны либо указать абсолютный путь, либо путь относительно текущего каталога.Ваша программа не будет пытаться найти файл для удаления в другом месте.

0 голосов
/ 20 декабря 2010

В зависимости от того, какой файл вы хотите удалить и где он хранится, есть вероятность, что вы ожидаете, что Java волшебным образом найдет файл.

String catName = 'test'
File file = new File(catName + '.txt');

Если программа выполняется, скажем, в C: \ TestProg \, то объект File указывает на файл в расположении C: \ TestProg \ test.txt. Поскольку файловый объект - больше, чем просто помощник, у него нет проблем с указанием на несуществующий файл (File может использоваться для создания новых файлов).

Если вы пытаетесь удалить файл, который находится в определенном месте, то вам необходимо добавить имя папки к пути к файлу, либо канонически, либо относительно места выполнения.

String catName = 'test'
File file = new File('myfiles\\'+ catName +'.txt');

Теперь file ищет в C: \ TestProg \ myfiles \ test.txt.

Если вы хотите найти этот файл где-нибудь, вам нужен рекурсивный алгоритм поиска, который будет проходить по файловой системе.

...