0

2 つのファイル オブジェクトがoldFileありnewFile、対応するファイル名を交換したいと考えています。だから私は最初に名前 oldFileに名前を変更します。tmpFileoldFile の絶対パスを取得し、「.bak」を追加します。

String tmpFile = oldFile.getAbsolutePath().toString()+".bak";
oldFile.renameTo(new File(tmpFile));

問題は、Fileクラスのコンストラクターが「\」をエスケープとして扱う一方で、 tmpFileにパスの生の文字列が含まれていることです。

new File("D:\\oldfile.java.bak");

どうすれば対処できますか?

4

2 に答える 2

3

\File のコンストラクターはエスケープとして扱いません。文字列リテラル\でエスケープする必要があります。文字列リテラルには、単一の文字が含まれています: .\"\\"'\'

String path = "D:\\oldFile";
System.out.println(path); // prints D:\oldFile
File f = new File(path);
System.out.println(f.getAbsolutePath()); // prints D:\oldFile
于 2012-05-04T15:39:10.153 に答える
2

でエスケープをエスケープする必要がありますが、そうする必要がある場合は、Windows.replace("\", "\\")で使用する必要がないことに注意してください。\Java/も同様に問題なくサポートしており、これらの問題はありません。あなたはそれを行うことができreplace("\", "/")、それは同様に機能します。

また、Java で新しいファイルを作成する方法を読んで理解する必要があります。File.createNewFile()呼び出す必要があります。コンストラクターでオブジェクトを作成するだけFileでは、ファイルシステム上に実際にファイルが作成されるわけではなく、その場所にファイルが存在することも保証されません。

于 2012-05-04T15:37:11.293 に答える