0

例は単純な画像です。

私は非常に多くのことを試しましたが、非常に理にかなっていますが、うまくいきません。

これまでに行ったことは、25 枚の写真を取得して追加できることです。

/sdcard/アプリ名/sub/dir/filename.jpg

それらはすべて DDMS に従ってそこに表示されますが、ファイルサイズは常に 0 です。

おそらく入力ストリームが原因だと思いますか?

ダウンロードと保存を処理する関数は次のとおりです。

public void DownloadPages()
{   
    for (int fileC = 0; fileC < pageAmount; fileC++)
    {

        URL url;
        String path = "/sdcard/Appname/sub/dir/";

        File file = new File(path, fileC + ".jpg");

        int size=0;
        byte[] buffer=null;

        try{
            url = new URL("http://images.bluegartr.com/bucket/gallery/56ca6f9f2ef43ab7349c0e6511edb6d6.png");
            InputStream in = url.openStream();

            size = in.available();  
            buffer = new byte[size];  
            in.read(buffer);  
            in.close();  
        }catch(Exception e){

        }

            if (!new File(path).exists())
                new File(path).mkdirs();

       FileOutputStream out;

       try{
           out = new FileOutputStream(file);
           out.write(buffer);  
           out.flush();  
           out.close();
       }catch(Exception e){

       }


    }

}

そのディレクトリに25個のファイルが表示され続けますが、それらのファイルサイズはすべてゼロです。理由がわかりません。これは、私が Java プログラムで使用したコードと実質的に同じです。

PS...

あなたが私に解決策を与えるつもりなら... 私はすでにこのようなコードを試しました。うまくいきません。

    try{
        url = new URL(urlString);
        in = new BufferedInputStream(url.openStream());
        fout = new FileOutputStream(filename);

        byte data[] = new byte[1024];
        int count;
        System.out.println("Now downloading File: " + filename.substring(0, filename.lastIndexOf(".")));
        while ((count = in.read(data, 0, 1024)) != -1){
            fout.write(data, 0, count);
        }
    }finally{
            System.out.println("Download complete.");
            if (in != null)
                    in.close();
            if (fout != null)
                    fout.close();
    }
}

これは私のディレクトリがどのように見えるかのイメージです

http://oi48.tinypic.com/2cpcprm.jpg

4

2 に答える 2

1

2番目のオプションを少し変更して、次の方法で試してください。

byte data[] = new byte[1024];
long total = 0;

int count;

while ( ( count = input.read(data)) != -1 )
{
    total += count;
    output.write( data,0,count );
}

これはwhile文が異なりますwhile ((count = in.read(data, 0, 1024)) != -1)

于 2012-11-18T05:57:05.087 に答える
0

Guavaを使用すると、次のように動作するはずです。

String fileUrl = "xxx";
File file = null;

InputStream in;
FileOutputStream out;
try {
  Uri url = new URI(fileUrl);
  in = url.openStream();
  out = new FileOutputStream(file)
  ByteStreams.copy(in, out);
} 
catch (IOException e) {
  System.out.println(e.toString());
}
finally {
  in.close();
  out.flush();
  out.close();
}
于 2012-11-18T06:24:27.770 に答える