#файлы #java
Добрый вечер. 3 дня уже пытаюсь понять, как перемещать файлы в java. Есть задача: прочитать список файлов из указанного каталога, отсортировать по слову, вводимому с клавиатуры и переместить отсортированные файлы в указанный каталог. Этот метод возвращает список файлов из каталога. public static String[] getFilesList(File fl) { String[] listFiles = fl.list(); for (int i = 0; i < listFiles.length; i++) { } return listFiles; } Далее реализована сортировка циклом: for (int i = 0; i < arr.length; i++) { if (arr[i].indexOf(inpFilterName) > 0) И вот теперь самая большая проблема - в этом же цикле я хочу сразу перемещать файлы по указанному пути. Гугл подсказал, что необходимо использовать метод renameTo() класса File. Пыталась реализовать так: File dir = new File(); dir.renameTo() Но я не могу понять, что передавать ему в качестве аргументов, и сработает ли, если на входе у нас имя файла а не файл? Вобщем, я совсем запуталась и очень жду помощи!
Ответы
Ответ 1
Рискну предположить, что под сортировкой вы имели ввиду фильтрацию - т.е. переместить только те файлы, в именах которых содержится указанная строка inpFilterName. В таком случае можно поступить следующим образом: File destFolder = new File("output"); // это папка, в которую будем перемещать File[] files = fl.listFiles(); // получаем непосредственно файлы, не просто имена for (File file : files) { if (file.getName().indexOf(inpFilterName) != -1) { file.renameTo(new File(destFolder, file.getName())); } } Кстати, обратите внимание на разницу условий в if. Возможно, вы написали ровно то, что хотели, но на всякий случай: ваше условие выберет строки, в которых искомая подстрока стоит по индексу 1 или больше. Т.е. "test123".indexOf("test") это условие не пропустит. String#indexOf() возвращает -1 в случае неудачи, а не 0.Ответ 2
Проверь этот код! Я сам писал. В этом коде сначала renameTo - перемещает папку в другой каталог и потом отсортирует, то есть удаляет ненужные файлы из папки после перемещения. import java.io.File; import java.io.IOException; public class File_remove { private static String to = ""; public static void main(String[] args) throws IOException { String from = "c:/from"; to = "c:/to"; File From = new File(from); if (!From.exists()) { System.out.println(to + " does not exist!"); return; } File To = new File(to); if (!To.delete()){ System.out.println("You can't move!"); return; } From.renameTo(To); Check(To.list(), "inputFilterName"); } public static void Check(String[] arr, String inpFilterName) { for (int i = 0; i < arr.length; i++) { if (arr[i].indexOf(inpFilterName) < 0){ if (!(new File(to + File.separator + arr[i]).delete())){ System.out.println("You can't delete the file!"); } } } } }
Комментариев нет:
Отправить комментарий