0

我的目的是重命名一个文件。我正在做的是:我在一个文本文件中搜索一个特定的字符串。在这么多文件中,如果找到了特定的文本,那么我想用给定的字符串重命名该文本文件。

这是我尝试过的:

    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

4 回答 4

2

您正在循环中使用相同的名称重命名。先把那东西修好。此外,通过方法获取boolean变量中的返回值,并在您的.renameTo()if

于 2009-11-11T07:04:14.577 回答
1

我很难阅读给定的代码,但是有一个renameTo方法File请参阅this javadoc)。请注意,它接受一个表示所需路径名的 File 对象,并返回一个布尔值。

于 2009-11-11T07:04:30.120 回答
1

来自 renameTo 的 Javadoc

...,它可能不是原子的,如果具有目标抽象路径名的文件已经存在,它可能不会成功。

您在第二个 renameTo 命令中检查返回的布尔值。删除所有 renameTo 命令,或存储第一个命令的布尔值并将此布尔值打印到控制台。

于 2009-11-11T07:18:30.507 回答
0

首先,您有时使用 \ 和其他时间 //,我在 Mac 上,所以不确定您应该在 Windows 上使用什么。其次,您将所有文件重命名为相同的名称。

使固定:

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

于 2009-11-11T07:28:02.827 回答