尝试从我的应用程序中的服务器下载文件时获取无效参数错误

时间:2013-08-06 04:56:56

标签: android

我正在尝试从服务器获取文件并将其存储在我的应用程序中的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 个答案:

答案 0 :(得分: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,您可能需要使用绝对路径。

答案 1 :(得分:0)

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

答案 2 :(得分:0)

在清单文件中添加WRITE_EXTERNAL_STORAGE PERMISSION

答案 3 :(得分:0)

我终于找到了解决方法。是文件名中的特殊字符问题。文件名末尾有一个换行符,当首先创建文件时,该换行符被错误地附加。删除修复此问题。谢谢大家。