Как я могу переименовать файл в Java? - PullRequest
0 голосов
/ 11 ноября 2009

Моя цель - переименовать один файл. Что я делаю: я ищу конкретную строку в текстовом файле. Среди множества файлов, и если этот конкретный текст найден, я хочу переименовать этот текстовый файл с заданной строкой.

Вот что я пробовал:

    String opcode="OPCODES";   // String that I want to search.
    File file = new File("D:\\CFF1156");  // All files are inside this folder.
    System.out.println("The File Name is :"+file.getName());
    File[] f = file.listFiles();
    System.out.println("The Length of File is :"+f.length);
    Boolean flag=false;
    StringBuffer contents = new StringBuffer();
    BufferedReader reader = null;

    for(int i=0;i<f.length;i++)
    {
        try{
            reader = new BufferedReader(new FileReader(f[i]));
            String text = null;

            while ((text = reader.readLine()) != null)
            {
                if(text.contains(opcode))
                {
                    System.out.println("Found");
                    System.out.println("The File Containing the Search text is :"+f[i]);
                    f[i].renameTo(new File("D://CFF1156/changed.txt"));
                    System.out.println("renamed :"+(f[i].renameTo(new File("D://CFF1156/changed.txt"))));
                    if(f[i].renameTo(new File("D://CFF1156/changed.txt")))
                    {
                        System.out.println("Successfully renamed");
                    }
                    else
                    {
                        System.out.println("Error");
                    }
                }
            }
        }
        catch(Exception e)
        {
            System.out.println(e.getMessage());
        }
        finally
        {
            try
            {
                if (reader != null)
                {
                    reader.close();
                }
            } 
            catch (IOException e)
            {
                e.printStackTrace();
            }
        }
    }

Приведенный выше код выполняет поиск конкретного файла. Но я не могу его переименовать.

Каким было бы рабочее решение этой проблемы?

Ответы [ 4 ]

2 голосов
/ 11 ноября 2009

Вы переименовываете с тем же именем в цикле. Исправь это первым. Кроме того, возьмите возвращенное значение boolean в переменной методом renameTo() и используйте эту переменную в своем if.

1 голос
/ 11 ноября 2009

Из Javadoc переименовано в

..., это может быть не атомарно, и это может не получиться, если файл с абстрактный путь назначения уже существует.

Вы проверяете возвращенное логическое значение во второй команде renameTo. Удалите все команды renameTo или сохраните логическое значение первой команды и выведите это логическое значение на консоль.

1 голос
/ 11 ноября 2009

Мне трудно читать код, как указано, но есть метод renameTo для File ( см. Этот javadoc ). Обратите внимание, что он принимает объект File, представляющий желаемое имя пути, и возвращает логическое значение.

0 голосов
/ 11 ноября 2009

Во-первых, вы иногда используете \ и другие времена //, im на Mac, поэтому не уверены, что вам следует использовать в Windows. Во-вторых, вы переименовываете все файлы в одно и то же имя.

Исправлено:

boolean renamed = f[i].renameTo(new File("D://CFF1156/changed"+ i + ".txt")); System.out.println(renamed?"Succesfully renamed":"Error");

...