0

我正在尝试从服务器获取文件并将其存储在我的应用程序的 sd 卡中。我收到一个无效的参数错误。

请参阅下面的附加代码和 logcat。请帮助

另外,有没有更好的方法来做到这一点。我也经常遇到套接字超时异常

File file = new File(getExternalFilesDir(null),values);

                URL url = new URL("http://abcd.com/edmuploads/"+values);
                URLConnection urlConnection = url.openConnection();
                urlConnection.setReadTimeout(7000);
                urlConnection.setConnectTimeout(7000);

                InputStream inputStream = urlConnection.getInputStream();
                BufferedInputStream bufferinstream = new BufferedInputStream(inputStream);

                ByteArrayBuffer baf = new ByteArrayBuffer(5000);
                int current = 0;
                while((current = bufferinstream.read()) != -1){
                    baf.append((byte) current);
                }

//This is where I am getting an invalid  argument error. The line number 560 as mentioned in the logs below
                FileOutputStream fos = new FileOutputStream(file, false); 

                    fos.write(baf.toByteArray());
                    fos.flush();
                    fos.close();

原木猫

08-06 10:15:37.089: W/System.err(11448): java.io.FileNotFoundException: /mnt/sdcard/Android/data/com.veleztechnologies.eldicciomalopremium/files/1375701341.3gp
08-06 10:15:37.089: W/System.err(11448):  (Invalid argument)
08-06 10:15:37.099: W/System.err(11448):    at org.apache.harmony.luni.platform.OSFileSystem.open(Native Method)
08-06 10:15:37.099: W/System.err(11448):    at dalvik.system.BlockGuard$WrappedFileSystem.open(BlockGuard.java:232)
08-06 10:15:37.099: W/System.err(11448):    at java.io.FileOutputStream.<init>(FileOutputStream.java:94)
08-06 10:15:37.099: W/System.err(11448):    at com.veleztechnologies.eldicciomalopremium.WordListActivity.getFileList(WordListActivity.java:560)
4

4 回答 4

0

在这种情况下,您似乎无法写入不存在的文件。相反,使用:

if(!file.exists()) {
    file.createNewFile();
}

编辑:至于下载文件的更好方法,这就是我使用的:

URL website = new URL("http://url");
ReadableByteChannel rbc = Channels.newChannel(website.openStream());
FileOutputStream fos = new FileOutputStream("information.html");
fos.getChannel().transferFrom(rbc, 0, Long.MAX_VALUE);

对于 FileOutputStream,您可能需要使用绝对路径。

于 2013-08-06T05:01:25.597 回答
0

将此权限添加到您的清单文件

于 2013-08-06T06:18:19.283 回答
0

在清单文件中添加 WRITE_EXTERNAL_STORAGE PERMISSION

于 2013-08-06T06:21:19.737 回答
0

我终于找到了解决方案。文件名中的特殊字符有问题。文件名末尾有一个换行符,这是在最初创建文件时错误地附加的。删除解决了这个问题。谢谢大家。

于 2013-08-07T18:16:24.473 回答