0

そこでようやくの名前file1を別の名前に変更しました。しかし、私がイライラするのは、パスが変更されないことです!今後の操作には常にfile1のハンドラーが必要なので、その理由と対処方法を教えてください。サンプルコードは次のとおりです。

import java.io.File;
import java.io.IOException;

public class TestFile {
volatile private static File file1;
volatile private static File file2;

public static void main(String[] args) throws IOException {
    file1 = new File("D:\\work\\triangle\\src\\original\\test1.java");
    file2 = new File("D:\\work\\triangle\\src\\original\\test2.java");
    File tmpFile;

    String file2name = file2.getAbsolutePath().toString().replace("\\", "/") + ".bak";
    System.out.println(file2name);

    String file1name = file1.getAbsolutePath().toString()
            .replace("\\", "/");
    System.out.println(file1name);

    tmpFile = new File(file2name);
    if (!file1.renameTo(tmpFile)) {
        System.err.println("file1->file2name-bak");
    }
    System.out.println("file1\t"+file1.getAbsolutePath().toString());
    System.out.println("tmpFile\t"+tmpFile.getAbsolutePath().toString());

}
}

そして私はそれらの出力を取得します:

D:/work/triangle/src/original/test2.java.bak
D:/work/triangle/src/original/test1.java
file1   D:\work\triangle\src\original\test1.java
tmpFile D:\work\triangle\src\original\test2.java.bak

とはどのようにして異なるパスを生み出すfile1ことができますか?tmpFile

4

1 に答える 1

4

あなたはaが何であるかを誤解していFileます。

Aは、特定Fileのファイルの名前/パスではなく、ファイル名/パスを示します。したがって、を使用してファイルの名前を変更しても、オブジェクトに格納されているパス名は変更されません。オブジェクトは不変です。FileFileFile

それでは、両方を変更する方法はありますか?

いいえ。Fileオブジェクトにエンコードされている名前/パスは変更されず、変更できません。信じられない場合は、JDKに付属しているソースコードを確認してください。

(aのパス名の状態はFile、String-valued属性で表されます。割り当てられるpath場所pathは、コンストラクターとreadObjectメソッドのみです。)

于 2012-05-05T03:39:09.537 に答える