2012-11-18 66 views
0

一個例子是一個簡單的圖像。如何將文件從互聯網寫入SD卡?

我已經嘗試過這麼多的事情,它只是拒絕工作,儘管做了很多的意義。

我所做到目前爲止我能搶的25張,並根據那裏把它們添加到

/SD卡/應用程序名稱/子/ 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

+0

你給'<使用許可權的android:NAME = 「android.permission.WRITE_EXTERNAL_STORAGE」>中的AndroidManifest.xml'? – Lucifer

+0

當然。我還可以解釋如何將附加文件夾添加到我的SD卡中。 – user819511

+0

你應該在catch例外中打印棧跟蹤。也許互聯網上的文件無法訪問。記錄緩衝區的大小 – nandeesh

回答

1

有點改變你的第二個選擇的圖像,嘗試如下方法,

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

int count; 

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

這一個在陳述中有所不同while ((count = in.read(data, 0, 1024)) != -1)

+0

試過你的代碼,就像以前一樣。它所做的只是製作目錄,但從不將該文件保存到該目錄。 – user819511

+0

你有沒有在真實設備上試過它? – Lucifer

+0

我沒有一個。 – user819511

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(); 
} 
+0

試過你的代碼,它只是拒絕將文件保存到它指向的目錄。如果我調用mkdir(),它會創建目錄,但它不會將文件保存到該路徑。 – user819511

+0

檢查你的目錄。也許你沒有寫權限。 – Kurru

+0

我有權限啓用...已經提到過很多次。 – user819511