내 응용 프로그램은 SD 카드에 파일을 저장하는 기능이 있습니다. 파일 이름에 특수 문자가있는 SD 카드의 파일 저장 문제
다음
파일을 저장하려면 코드입니다 이 그것에서try {
File mediaDir = new File(
Environment.getExternalStorageDirectory(), "Media");
if (!mediaDir.exists()) {
mediaDir.mkdirs();
}
File f = new File(mediaDir, fileName);
f.createNewFile();
OutputStream os = new FileOutputStream(f);
byte[] data = toWriteBytes;
os.write(data);
os.close();
} catch (Exception e) {
Log.w("ExternalStorage", "Error writing ");
e.printStackTrace();
}
.txt)로 여기
이 스택 트레이스는 모든10-11 17:18:48.225: WARN/ExternalStorage(4519): Error writing
10-11 17:18:48.225: WARN/System.err(4519): java.io.IOException: Invalid argument
10-11 17:18:48.235: WARN/System.err(4519): at java.io.File.createNewFileImpl(Native Method)10-11 17:18:48.245: WARN/System.err(4519): at java.io.File.createNewFile(File.java:1257)
10-11 17:18:48.245: WARN/System.err(4519): at com.xxxx.Utility.createExternalStoragePrivateFile(Utility.java:87)
10-11 17:18:48.245: WARN/System.err(4519): at com.xxxxxx$1.handleMessage(Utility.java:52)
10-11 17:18:48.245: WARN/System.err(4519): at android.os.Handler.dispatchMessage(Handler.java:99)
10-11 17:18:48.245: WARN/System.err(4519): at android.os.Looper.loop(Looper.java:123)
10-11 17:18:48.245: WARN/System.err(4519): at android.app.ActivityThread.main(ActivityThread.java:3839)
10-11 17:18:48.245: WARN/System.err(4519): at java.lang.reflect.Method.invokeNative(Native Method)
10-11 17:18:48.245: WARN/System.err(4519): at java.lang.reflect.Method.invoke(Method.java:507)
10-11 17:18:48.245: WARN/System.err(4519): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:841)
10-11 17:18:48.245: WARN/System.err(4519): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:599)
10-11 17:18:48.245: WARN/System.err(4519): at dalvik.system.NativeStart.main(Native Method)
그래서
을 필요로하는 경우에, 내 질문에 정확히 어떻게 문제가 될 방법 수있는 것입니다 나는 그것을 해결합니까?** 참고 : 단일 단어 파일 이름을 사용하여 테스트했으며 완벽하게 정상적으로 작동합니다. f.createNewFile()
이 없으면 FileNotFoundException
이됩니다.
는 마우스의 코멘트를 본 후, 나는 그것이 파일 이름에 공간이되지 않을 수 있다는 것을 깨달았다. 여기에 스택 추적이 있습니다.
10-11 18:06:20.365: WARN/System.err(5280): java.io.FileNotFoundException: /mnt/sdcard/Media/Who owns the World? Smokers or Non-smokers .acsm (Invalid argument)
10-11 18:06:20.385: WARN/System.err(5280): at org.apache.harmony.luni.platform.OSFileSystem.open(Native Method)
10-11 18:06:20.385: WARN/System.err(5280): at dalvik.system.BlockGuard$WrappedFileSystem.open(BlockGuard.java:232)
10-11 18:06:20.385: WARN/System.err(5280): at java.io.FileOutputStream.<init>(FileOutputStream.java:94)
10-11 18:06:20.385: WARN/System.err(5280): at java.io.FileOutputStream.<init>(FileOutputStream.java:66)
10-11 18:06:20.385: WARN/System.err(5280): at com.xxxx.Utility.createExternalStoragePrivateFile(Utility.java:88)
10-11 18:06:20.385: WARN/System.err(5280): at com.xxxxx.Utility$1.handleMessage(Utility.java:52)
10-11 18:06:20.385: WARN/System.err(5280): at android.os.Handler.dispatchMessage(Handler.java:99)
10-11 18:06:20.385: WARN/System.err(5280): at android.os.Looper.loop(Looper.java:123)
10-11 18:06:20.385: WARN/System.err(5280): at android.app.ActivityThread.main(ActivityThread.java:3839)
10-11 18:06:20.385: WARN/System.err(5280): at java.lang.reflect.Method.invokeNative(Native Method)
10-11 18:06:20.385: WARN/System.err(5280): at java.lang.reflect.Method.invoke(Method.java:507)
10-11 18:06:20.385: WARN/System.err(5280): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:841)
10-11 18:06:20.385: WARN/System.err(5280): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:599)
10-11 18:06:20.385: WARN/System.err(5280): at dalvik.system.NativeStart.main(Native Method)
제 생각에는 파일 이름에 유효하지 않은 문자가 있어야합니다. 파일 이름은 ("누구가 세계를 소유하고 있습니까? 흡연자 또는 비 흡연자 .acsm")입니다. 어떤 생각?
비슷한 문제에 직면 한 사용자를 위해 파일 이름에 실제로 유효하지 않은 문자가 있습니다. 나는 this thread을 발견했는데, 이는 파일 이름에 유효하지 않은 문자에 관한 더 많은 정보를 가지고있다. 희망이 어떤 의심을 취소합니다.
f.createNewFile()없이 사용 해보십시오. –
FileNotFoundException – PH7
에 매니페스트 파일에 저장 권한을 설정해야합니다. –