JavaのInputStreamからファイルパス/名前を取得するにはどうすればよいですか?
29355 次
3 に答える
12
不可能です。(Java APIのFileInputStreamからではありません)。コンストラクターは、FileInputStream
この情報をどのフィールドにも格納しません。
public FileInputStream(File file) throws FileNotFoundException {
String name = (file != null ? file.getPath() : null);
SecurityManager security = System.getSecurityManager();
if (security != null) {
security.checkRead(name);
}
if (name == null) {
throw new NullPointerException();
}
fd = new FileDescriptor();
open(name);
}
于 2010-03-23T17:06:41.433 に答える
10
InputStream
がファイルまたはパスではなかった可能性があるため、できません。InputStream
その場でデータを生成する独自の実装ができます
于 2010-03-23T17:04:10.540 に答える
4
2つの重要なオブジェクト指向設計の原則により、抽象化とカプセル化という、求めていることを実行できなくなります。
- 抽象化は、特定のコンテキストでの使用に必要な詳細のみを持つ一般的な概念を定義するプロセスです(詳細はこちら)。この状況では、抽象化はです。これは、バイトのソースに関係なく、
InputStream
バイトを提供できる一般的なインターフェイスです。の抽象化には、ファイルパスの概念はありません。これは、の特定の実装にのみ関連します。InputStream
InputStream
- カプセル化は、クラスの実装の詳細をそのクラスのコンシューマー/ユーザーから隠すプロセスです。この特定の状況で
FileInputStream
は、読み取り元のファイルの詳細をカプセル化します。これは、InputStream
その情報が使用法に関連していないためです。path
インスタンスフィールドはカプセル化されているため、クラスのユーザーは使用できません。
そうは言っても、いくつかの重要な制限を受け入れる意思がある場合は、変数にアクセスすることができます。path
基本的に、要点はInputStream
、が実際にのインスタンスであるかどうかを確認し、そうである場合は、リフレクションを使用してインスタンスフィールドFileInputStream
を読み取ることができるということです。path
このアクセスの詳細は、Javaドキュメントやオンラインで簡単に見つけることがjava.lang.Class
でき、ほとんどのコンテキストで一般的には良いことではないため、省略します。質問は理由についてのコンテキストを提供しないので、これ以上合理的なアプローチを提供することは困難です。
于 2016-04-22T20:08:10.250 に答える