0

私の目的は、1 つのファイルの名前を変更することです。私がやっていることは、テキスト ファイル内の特定の文字列を検索していることです。非常に多くのファイルの中で、その特定のテキストが見つかった場合、そのテキスト ファイルの名前を特定の文字列に変更します。

これが私が試したことです:

    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(この javadoc を参照してください)。目的のパス名を表す File オブジェクトを受け取り、ブール値を返すことに注意してください。

于 2009-11-11T07:04:30.120 に答える
1

renameTo の Javadoc から

...、アトミックではない可能性があり、宛先の抽象パス名を持つファイルが既に存在する場合、成功しない可能性があります。

2 番目の 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 に答える