4

File.renameTo(...)宛先ファイル パスに含まれるサブディレクトリが作成されないのはなぜですか?


例えば、

File source = new File(System.getProperty("user.dir") + 
                "/src/MyFolder/MyZipFolder.zip");
File dest = new File(System.getProperty("user.dir") + 
                "/src/MyOtherFolder/MyZipFolder.zip");
System.out.println(source.renameTo(dest));

MyOtherFolderは存在しないため、これは常に を返しますfalse。これが機能するためには、すべてのサブディレクトリがプログラムによって作成されるか (つまりmkdirs()、手動で作成される)、存在することを確認する必要があります。この機能がこのメソッドに含まれていない理由はありますか?

4

4 に答える 4

3

なんで?

おそらく、一般的なオペレーティングシステムや他のプログラミング言語のランタイムライブラリが提供するAPIとの一貫性/互換性のためです。

おそらく、ユーザーが実際にこれを行うことを意図していなかった場合、中間ディレクトリを作成するのは悪い考えであるためです。たとえば、彼/彼女がパス内のディレクトリ名の1つを単にタイプミスした場合。

しかし、それは実際には関係ありません。肝心なのは、これがrenameToメソッドの動作方法であるということです。

于 2011-07-25T14:01:54.607 に答える
1

サブディレクトリの作成は、他の観点からは予期しない副作用と見なされる場合があります。誰もが暗黙のうちにそれを必要としていると確信していますか?

于 2011-07-25T14:00:55.170 に答える
1

現在の File API は、Java ではあまりうまく実装されていません。ファイル API には、ファイル メタデータの移動、コピー、取得など、現在存在しない望ましい機能が多数あります。

なぜAPIがそのまま書かれているのかについて、誰もあなたに答えられるとは思いません。おそらく最初の草稿が貧弱で、下位互換性の問題のために変更できませんでした。

これらの問題は、今後の Java 7 で対処されています。ファイルjava.nio.file.Filesを処理するために、まったく新しい API が作成されました。

于 2011-07-25T15:24:57.207 に答える
0

あなたには答えがありますが、私は次のように考えていました: 新しいメソッドを追加する機能要求 File.renameTo(File src, File destination, int makeDirs)

makeDirs の 3 つの定数: 1) サブ フォルダー/ ディレクトリを作成しない 2) 最終フォルダーが存在しない場合にのみ作成する (つまり、/r1/r2/r3/file.extn を指定した場合、r3 のみを作成する) r2 またはその他が存在しない場合は false を返します。3)可能なすべてのサブディレクトリを作成します

  • サブフォルダーがないOSの場合は、今と同じようにします
  • 古い方法はそのままです
于 2013-04-23T07:12:26.360 に答える