質問するログイン新規登録
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Q&A

解決済

2回答

910閲覧

【Java】BufferedOutputStreamオブジェクトから指定のパスを取得したい

gostsaronpasu

総合スコア14

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

0グッド

0クリップ

投稿2022/11/02 04:33

0

0

BufferedOutputStreamを初期化する際に指定したパスを取得したいです。

とある開発で指定のパスが必要な処理があるため、BufferedOutputStreamの初期化する際に指定したパスを取得する処理が必要になりました。
FileOutputStream内にあるPathの文字列を取得したいのですが、ネットで調べても不明であったため、今回ご質問させていただきました。
自分で調べても不明であったため、ご教示をお願いいたします。

イメージ説明
ソース

public class test111 {
public static void main(String[] args) throws IOException {
try {
BufferedOutputStream zip = new BufferedOutputStream(
new FileOutputStream(new File("C:\Users\XXXX\Desktop\zip\test.zip")));

zip.close(); } catch (FileNotFoundException e) { // TODO 自動生成された catch ブロック e.printStackTrace(); } }

補足情報(FW/ツールのバージョンなど)

FW:なし
Java8
Eclipse使用

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

機能として提供されていない以上、無理矢理やるしかなく、その「とある開発」での急所・汚点になる可能性があります。
どのような構造で何のために何故パスが必要なのか分かりませんが、ハックではなく素直にパスを伝える構造に直すべきと思います。
(OutputStream のラッパー的なものでも作ってパスを保存しておくとか…。)

投稿2022/11/02 06:41

jimbe

総合スコア13394

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

shiketa

2022/11/02 08:01

わたしもラッパクラスに賛成です。
guest

0

APIは提供されていないのでリフレクションで掘り当てる、とか。
# よゐこにリフレクションはあまりお薦めしませんが。

java

1import org.junit.jupiter.api.Test; 2 3import java.io.BufferedOutputStream; 4import java.io.FileOutputStream; 5import java.lang.reflect.Field; 6 7public class Hoge{ 8 @Test 9 public void ttt() throws Exception { 10 final FileOutputStream fos = new FileOutputStream("./xx.txt"); 11 final BufferedOutputStream bos = new BufferedOutputStream(fos); 12 13 System.out.println(getPath(bos)); 14 } 15 16 // 17 private String getPath(final BufferedOutputStream bos) throws Exception { 18 Object bosOut = null; 19 for (Field fi : BufferedOutputStream.class.getSuperclass().getDeclaredFields()) { 20 if (fi.getName().equals("out")) { 21 fi.setAccessible(true); 22 bosOut = fi.get(bos); 23 } 24 } 25 26 if (bosOut instanceof FileOutputStream) 27 ; 28 else 29 return null; 30 31 for (Field fi : FileOutputStream.class.getDeclaredFields()) { 32 if (fi.getName().equals("path")) { 33 fi.setAccessible(true); 34 return (String) fi.get(bosOut); 35 } 36 } 37 38 return null; 39 } 40}
./xx.txt

投稿2022/11/02 06:27

shiketa

総合スコア4141

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.30%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問