如何从互联网将文件写入 SD 卡?
Posted
技术标签:
【中文标题】如何从互联网将文件写入 SD 卡?【英文标题】:How to write files to an SD Card from the internet? 【发布时间】:2012-11-18 04:32:56 【问题描述】:一个例子是一个简单的图像。
我已经尝试了很多东西,尽管很有意义,但它只是拒绝工作。
到目前为止我所做的是我能够抓取 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
【问题讨论】:
你有没有在你的 androidManifest.xml 中给出<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"></uses-permission>
?
当然。我还能如何解释将文件夹附加到我的 SD 卡。
您可能应该在 catch 异常中打印堆栈跟踪。也许互联网上的文件无法访问。记录缓冲区的大小
该文件在我制作的 java 程序中很容易下载。这一定是我的代码。
【参考方案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语句while ((count = in.read(data, 0, 1024)) != -1)
中不一样
【讨论】:
试过你的代码,它就像以前一样。它所做的只是创建目录,但从不将文件保存到该目录。 opps,那么我建议你先在任何真实设备上尝试,而不是假设代码错误,只需尝试从任何地方安排设备。【参考方案2】:使用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();
【讨论】:
试过你的代码,它只是拒绝将文件保存到它指向的目录。如果我调用 mkdir() 它将创建目录,但它不会将文件保存到该路径。 检查您的目录。也许你没有权限在那里写。 我启用了权限...已经提到过很多次了。以上是关于如何从互联网将文件写入 SD 卡?的主要内容,如果未能解决你的问题,请参考以下文章
使用 SAF(存储访问框架)的 Android SD 卡写入权限