• ベストアンサー

ファイルのコピー

ほかの言語は知らないのですが、 ファイルのリネーム、削除はあるのに、 なぜJavaには、 ファイルのコピーが標準でできないのでしょうか? OSレベルで解決できそうなのに。

質問者が選んだベストアンサー

  • ベストアンサー
  • UKY
  • ベストアンサー率50% (604/1207)
回答No.3

まあ、元のファイルを読み込んで新しいファイルに書き込むだけでコピーできるなら、Java にも最初から copy メソッドが用意されていたことでしょう。 しかし実際にはファイルの「中身」を移すだけではコピーはできませんね。 ファイルの作成日時や更新日時の情報はどうするのでしょうか? Unix にはパーミッションやオーナーという概念もあります。Windows の NTFS には名前付きストリームといって、本来のファイルの中身とは別にデータを保存できる仕組みがあります。Mac ではリソースフォークというメタデータがあります。 つまり、ファイルをコピーすることの意味が OS によって違うわけです。どの OS でも使えることが前提の Java では、このような OS 間の違いを全て吸収することができない、と判断されたのでしょう。

その他の回答 (2)

回答No.2

自分もJavaを勉強したときにそのことについて疑問を持ちました。 ただ、リネーム、削除とコピーを比べたときに、リネームも削除も記憶領域容量が変わらない、もしくは経る方向に行くのに比べて、コピーは明らかに増える方向に行きますよね?たぶん、その辺に問題があるのではないかと。 Javaの"Write Once, Run Anywhere"という謳い文句を実現しようとしたときに、記憶領域容量をボコボコ増やすことができない環境があったのではないでしょうか・・ あくまで推測の話で申し訳ありませんが。 (ちなみに、WindowsのCでは BOOL CopyFile(LPCTSTR SrcFile, LPCTSTR DestFile, BOOL Exists); というコピーができる関数があったりします)

noname#86752
noname#86752
回答No.1

リネームや削除は一つの機能だけど、コピーは読む->書くという二つの機能をくっつけただけなので、わざわざ作る必要がなかった・・・のかも。 jakarta commons-ioにそれを行うものが用意されていますが、自分で作っても簡単だと思います。

noname#19197
質問者

補足

そうなんですが、 OSにコピーするコマンド?はありますよね。 WindowsならCopy Linuxならcp なのに、APIに実装されてないのが納得できないんです。

関連するQ&A