一个例子是一个简单的图像。
我已经尝试了很多东西,尽管它很有意义,但它就是拒绝工作。
到目前为止我所做的是能够抓取 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 程序中使用的代码相同。
附注...
如果你要给我一个解决方案...我已经尝试过这样的代码。这不起作用。
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();
}
}
这是我的目录的图像
最佳答案
对您的第二个选项进行一些更改,请按以下方式尝试,
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)
关于java - 如何从互联网将文件写入SD卡?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13437521/