7

Java関数を使用できるjavascriptファイル(.js)にアドオンを書き込むことができるソフトウェアがあります(これが一般的かどうかはわかりませんが、javascriptファイルでJava呼び出しを見たことはありません)

Web サーバーからバイナリ ファイルをダウンロードし、ハード ドライブに書き込む必要があります。次のコードを試しました:

baseencoder = new org.apache.commons.codec.binary.Base64();
url = new java.net.URL("https://server/file.tgz");

urlConnect = url.openConnection();
urlConnect.setDoInput(true);
urlConnect.setDoOutput(true);
urlConnect.setRequestProperty("authorization","Basic "+ java.lang.String(baseencoder.encodeBase64(java.lang.String( username + ":" + password ).getBytes())));
urlConnect.setRequestProperty("content-type","application/x-www-form-urlencoded");

is = new java.io.DataInputStream(urlConnect.getInputStream());
fstream = new FileWriter("C:\\tmp\\test.tgz");
out = new BufferedWriter(fstream);
while((data = is.read()) != -1){
    out.write(data);
}

out.close();
is.close();

結果のファイルは有効な gzip アーカイブではなくなります。大きな間違いをしてしまったら申し訳ありませんが、私はプログラマーではなく、Java もあまり知りません。

4

4 に答える 4

33

FileWriterデータをテキストに変換しようとしている -は使用しないでください。

を使用するだけFileOutputStreamです。

byte[] buffer = new byte[8 * 1024];

InputStream input = urlConnect.getInputStream();
try {
  OutputStream output = new FileOutputStream(filename);
  try {
    int bytesRead;
    while ((bytesRead = input.read(buffer)) != -1) {
      output.write(buffer, 0, bytesRead);
    }
  } finally {
    output.close();
  }
} finally {
  input.close();
}
于 2009-09-25T13:28:19.253 に答える
9

IOUtils.copy()この質問はすでに回答済みですが、より簡単なアプローチは、を完全にコピーできるApacheCommonsIOのメソッドを使用するInputStreamことOutputStreamです。

于 2012-05-08T21:27:51.100 に答える
2

DataInputStream一般的なデータではなく、Java プリミティブを読み取るためのものです。

また、urlConnect.getInputStream();既に InputStream を返し、すべての InputStream が read() をサポートしているため、冗長です。

is = urlConnect.getInputStream();

PSこれは仮定isbisあり、同じ変数です。そうしないと、ループ内で間違ったストリームを読み取っています。

于 2009-09-25T13:32:52.940 に答える
0

LimitInputStream について読むだけで、効率を高めるために入力ストリームをバッファリングして、まさにあなたがしていることを行うように聞こえます。

于 2012-07-20T00:47:14.747 に答える