FileOutputStream
またはFileInputStream
からファイル名を取得する方法はありますか?
答えはノーです:http://download.Oracle.com/javase/1.4.2/docs/api/Java/io/FileOutputStream.html
http://docs.Oracle.com/javase/7/docs/api/index.html?java/io/FileOutputStream.html
ストリームの構築に使用されるFile
またはString
を返すパブリックメソッドはありません。
EDIT:FileInputStream
についても同様です。
この機能は、すぐに使用できるFile-Input/Output-Streamでは提供されませんが、File(またはfileName)を格納し、ゲッターを提供する独自のサブクラスを書くことを妨げるものは何もありません。
I/Oストリームは通常FileNameAware
/InputStream
抽象クラスで参照されるため、アプリケーションに特定の実装を結合させないため、OutputStream
インターフェイスを実装することをお勧めします。
可能、反射あり:トムGの答えは正しいです。つまり、パスを取得するAPIがありません。ただし、私のように変更できないフレームワークに固執し、他の手段でファイル名を取得できない場合、リフレクションを使用してパスを取得できます(私の場合、デバッグ目的で必要でした)。
Field pathField = FileOutputStream.class.getDeclaredField("path");
pathField.setAccessible(true);
String path = (String) pathField.get(outputStream);
明らかに、FileOutpuStreamの実装は時間とともに変化する可能性があり、このコードが破損する可能性があります。また、わかりやすくするために、上記のスニペットで例外の処理を省略しました。
1.6および1.7では使用不可 1.8では使用可能です。
これは原則としても不可能です。質問の前提は、各ファイル入力ストリームが、1つの名前を持つ1つのファイルに関連付けられていることです。 POSIXシステムでは、後者の仮定は間違っています。 POSIXシステムの場合、ファイルにはゼロを含む任意の数の名前(ハードリンク)を付けることができます。一時ファイルでは、プログラム終了時に一時ファイルが確実に削除されるようにするため、名前がゼロの場合がよくあります。
たくさんのファイルを書きましたIOコード、この機能は必要ありません。あなたがそれを求めているということは、設計上の欠陥があることを示唆しています。つまり、XYの問題があります。