Java FileOutputStream不使用API级别>;=22
我正试图写入SD卡上的文件。。。这段代码在emulator和API lvl 22下的真实设备上都没有问题。但由于某种原因,当API级别高于22时,它就不工作了(我在Emulator上测试它,我没有可用的真实设备来测试高于API lvl 22的版本) 这是它停止时没有错误的行(API级别>=22): 马上跳到Java FileOutputStream不使用API级别>;=22,java,android,Java,Android,我正试图写入SD卡上的文件。。。这段代码在emulator和API lvl 22下的真实设备上都没有问题。但由于某种原因,当API级别高于22时,它就不工作了(我在Emulator上测试它,我没有可用的真实设备来测试高于API lvl 22的版本) 这是它停止时没有错误的行(API级别>=22): 马上跳到 stream.close(); 有什么问题吗 更新: 好的,在为FileOutputStream添加了catch Exeption之后,我在logcat中得到了以下内容:
stream.close();
有什么问题吗
更新:
好的,在为FileOutputStream添加了catch Exeption之后,我在logcat中得到了以下内容:
12-31 12:11:48.814 17218-17235/com.smpc.davidtoth.smpc W/System.err﹕ java.io.FileNotFoundException: /storage/1608-2C08/smpcDir/smpcFile.txt: open failed: ENOENT (No such file or directory)
12-31 12:11:48.815 17218-17235/com.smpc.davidtoth.smpc W/System.err﹕ at libcore.io.IoBridge.open(IoBridge.java:452)
12-31 12:11:48.815 17218-17235/com.smpc.davidtoth.smpc W/System.err﹕ at java.io.FileOutputStream.<init>(FileOutputStream.java:87)
12-31 12:11:48.815 17218-17235/com.smpc.davidtoth.smpc W/System.err﹕ at java.io.FileOutputStream.<init>(FileOutputStream.java:72)
12-31 12:11:48.816 17218-17235/com.smpc.davidtoth.smpc W/System.err﹕ at com.smpc.davidtoth.smpc.UpdateWidgetService.readIt(UpdateWidgetService.java:321)
12-31 12:11:48.816 17218-17235/com.smpc.davidtoth.smpc W/System.err﹕ at com.smpc.davidtoth.smpc.UpdateWidgetService.downloadUrl(UpdateWidgetService.java:257)
12-31 12:11:48.817 17218-17235/com.smpc.davidtoth.smpc W/System.err﹕ at com.smpc.davidtoth.smpc.UpdateWidgetService.access$100(UpdateWidgetService.java:47)
12-31 12:11:48.817 17218-17235/com.smpc.davidtoth.smpc W/System.err﹕ at com.smpc.davidtoth.smpc.UpdateWidgetService$DownloadWebpageTask.doInBackground(UpdateWidgetService.java:211)
12-31 12:11:48.818 17218-17235/com.smpc.davidtoth.smpc W/System.err﹕ at com.smpc.davidtoth.smpc.UpdateWidgetService$DownloadWebpageTask.doInBackground(UpdateWidgetService.java:196)
12-31 12:11:48.818 17218-17235/com.smpc.davidtoth.smpc W/System.err﹕ at android.os.AsyncTask$2.call(AsyncTask.java:295)
12-31 12:11:48.818 17218-17235/com.smpc.davidtoth.smpc W/System.err﹕ at java.util.concurrent.FutureTask.run(FutureTask.java:237)
12-31 12:11:48.819 17218-17235/com.smpc.davidtoth.smpc W/System.err﹕ at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:234)
12-31 12:11:48.819 17218-17235/com.smpc.davidtoth.smpc W/System.err﹕ at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1113)
12-31 12:11:48.819 17218-17235/com.smpc.davidtoth.smpc W/System.err﹕ at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:588)
12-31 12:11:48.820 17218-17235/com.smpc.davidtoth.smpc W/System.err﹕ at java.lang.Thread.run(Thread.java:818)
12-31 12:11:48.820 17218-17235/com.smpc.davidtoth.smpc W/System.err﹕ Caused by: android.system.ErrnoException: open failed: ENOENT (No such file or directory)
12-31 12:11:48.909 17218-17235/com.smpc.davidtoth.smpc W/System.err﹕ at libcore.io.Posix.open(Native Method)
12-31 12:11:48.912 17218-17235/com.smpc.davidtoth.smpc W/System.err﹕ at libcore.io.BlockGuardOs.open(BlockGuardOs.java:186)
12-31 12:11:48.913 17218-17235/com.smpc.davidtoth.smpc W/System.err﹕ at libcore.io.IoBridge.open(IoBridge.java:438)
12-31 12:11:48.913 17218-17235/com.smpc.davidtoth.smpc W/System.err﹕ ... 13 more
12-31 12:11:48.814 17218-17235/com.smpc.davidoth.smpc W/System.err﹕ java.io.FileNotFoundException:/storage/1608-2C08/smpcDir/smpcFile.txt:open failed:enoint(没有这样的文件或目录)
12-31 12:11:48.815 17218-17235/com.smpc.davidoth.smpc W/System.err﹕ 在libcore.io.IoBridge.open中(IoBridge.java:452)
12-31 12:11:48.815 17218-17235/com.smpc.davidoth.smpc W/System.err﹕ 位于java.io.FileOutputStream。(FileOutputStream.java:87)
12-31 12:11:48.815 17218-17235/com.smpc.davidoth.smpc W/System.err﹕ 位于java.io.FileOutputStream。(FileOutputStream.java:72)
12-31 12:11:48.816 17218-17235/com.smpc.davidoth.smpc W/System.err﹕ 位于com.smpc.davidtoth.smpc.UpdateWidgetService.readIt(UpdateWidgetService.java:321)
12-31 12:11:48.816 17218-17235/com.smpc.davidoth.smpc W/System.err﹕ 位于com.smpc.davidoth.smpc.UpdateWidgetService.downloadUrl(UpdateWidgetService.java:257)
12-31 12:11:48.817 17218-17235/com.smpc.davidoth.smpc W/System.err﹕ 在com.smpc.davidtoth.smpc.UpdateWidgetService.access$100(UpdateWidgetService.java:47)
12-31 12:11:48.817 17218-17235/com.smpc.davidoth.smpc W/System.err﹕ 在com.smpc.davidoth.smpc.UpdateWidgetService$downloadWebPagetTask.doInBackground(UpdateWidgetService.java:211)上
12-31 12:11:48.818 17218-17235/com.smpc.davidoth.smpc W/System.err﹕ 在com.smpc.davidoth.smpc.UpdateWidgetService$downloadWebPagetTask.doInBackground(UpdateWidgetService.java:196)
12-31 12:11:48.818 17218-17235/com.smpc.davidoth.smpc W/System.err﹕ 在android.os.AsyncTask$2.call(AsyncTask.java:295)
12-31 12:11:48.818 17218-17235/com.smpc.davidoth.smpc W/System.err﹕ 位于java.util.concurrent.FutureTask.run(FutureTask.java:237)
12-31 12:11:48.819 17218-17235/com.smpc.davidoth.smpc W/System.err﹕ 在android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:234)
12-31 12:11:48.819 17218-17235/com.smpc.davidoth.smpc W/System.err﹕ 位于java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1113)
12-31 12:11:48.819 17218-17235/com.smpc.davidoth.smpc W/System.err﹕ 位于java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:588)
12-31 12:11:48.820 17218-17235/com.smpc.davidoth.smpc W/System.err﹕ 运行(Thread.java:818)
12-31 12:11:48.820 17218-17235/com.smpc.davidoth.smpc W/System.err﹕ 原因:android.system.ErrnoException:open失败:enoint(没有这样的文件或目录)
12-31 12:11:48.909 17218-17235/com.smpc.davidoth.smpc W/System.err﹕ 在libcore.io.Posix.open中(本机方法)
12-31 12:11:48.912 17218-17235/com.smpc.davidoth.smpc W/System.err﹕ 在libcore.io.BlockGuardOs.open上(BlockGuardOs.java:186)
12-31 12:11:48.913 17218-17235/com.smpc.davidoth.smpc W/System.err﹕ 在libcore.io.IoBridge.open中(IoBridge.java:438)
12-31 12:11:48.913 17218-17235/com.smpc.davidoth.smpc W/System.err﹕ ... 还有13个
我找到了解决办法
在Android api级别23中,权限模型发生了更改。现在,您需要在运行时请求权限
然后我实现了它,就像你在logcat中得到Api级别>=22的错误吗?logcat中根本没有错误……我已经更新了我的帖子。我意识到我以前使用的代码没有捕获FileOutputStream行的exeption。现在我至少在logcat中有一个错误(由于某些原因,该文件不存在)。。。请检查目标路径不存在,也就是说一些中间目录。是的,在API lvl 22下,emulator的路径始终是:/storage/sdcard/smpcDir/smpcFile.txt。。。不知道编号为“/1608-2C08”的wierd文件夹是什么,如果我使用API 23模拟器进行尝试。。。
stream.close();
12-31 12:11:48.814 17218-17235/com.smpc.davidtoth.smpc W/System.err﹕ java.io.FileNotFoundException: /storage/1608-2C08/smpcDir/smpcFile.txt: open failed: ENOENT (No such file or directory)
12-31 12:11:48.815 17218-17235/com.smpc.davidtoth.smpc W/System.err﹕ at libcore.io.IoBridge.open(IoBridge.java:452)
12-31 12:11:48.815 17218-17235/com.smpc.davidtoth.smpc W/System.err﹕ at java.io.FileOutputStream.<init>(FileOutputStream.java:87)
12-31 12:11:48.815 17218-17235/com.smpc.davidtoth.smpc W/System.err﹕ at java.io.FileOutputStream.<init>(FileOutputStream.java:72)
12-31 12:11:48.816 17218-17235/com.smpc.davidtoth.smpc W/System.err﹕ at com.smpc.davidtoth.smpc.UpdateWidgetService.readIt(UpdateWidgetService.java:321)
12-31 12:11:48.816 17218-17235/com.smpc.davidtoth.smpc W/System.err﹕ at com.smpc.davidtoth.smpc.UpdateWidgetService.downloadUrl(UpdateWidgetService.java:257)
12-31 12:11:48.817 17218-17235/com.smpc.davidtoth.smpc W/System.err﹕ at com.smpc.davidtoth.smpc.UpdateWidgetService.access$100(UpdateWidgetService.java:47)
12-31 12:11:48.817 17218-17235/com.smpc.davidtoth.smpc W/System.err﹕ at com.smpc.davidtoth.smpc.UpdateWidgetService$DownloadWebpageTask.doInBackground(UpdateWidgetService.java:211)
12-31 12:11:48.818 17218-17235/com.smpc.davidtoth.smpc W/System.err﹕ at com.smpc.davidtoth.smpc.UpdateWidgetService$DownloadWebpageTask.doInBackground(UpdateWidgetService.java:196)
12-31 12:11:48.818 17218-17235/com.smpc.davidtoth.smpc W/System.err﹕ at android.os.AsyncTask$2.call(AsyncTask.java:295)
12-31 12:11:48.818 17218-17235/com.smpc.davidtoth.smpc W/System.err﹕ at java.util.concurrent.FutureTask.run(FutureTask.java:237)
12-31 12:11:48.819 17218-17235/com.smpc.davidtoth.smpc W/System.err﹕ at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:234)
12-31 12:11:48.819 17218-17235/com.smpc.davidtoth.smpc W/System.err﹕ at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1113)
12-31 12:11:48.819 17218-17235/com.smpc.davidtoth.smpc W/System.err﹕ at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:588)
12-31 12:11:48.820 17218-17235/com.smpc.davidtoth.smpc W/System.err﹕ at java.lang.Thread.run(Thread.java:818)
12-31 12:11:48.820 17218-17235/com.smpc.davidtoth.smpc W/System.err﹕ Caused by: android.system.ErrnoException: open failed: ENOENT (No such file or directory)
12-31 12:11:48.909 17218-17235/com.smpc.davidtoth.smpc W/System.err﹕ at libcore.io.Posix.open(Native Method)
12-31 12:11:48.912 17218-17235/com.smpc.davidtoth.smpc W/System.err﹕ at libcore.io.BlockGuardOs.open(BlockGuardOs.java:186)
12-31 12:11:48.913 17218-17235/com.smpc.davidtoth.smpc W/System.err﹕ at libcore.io.IoBridge.open(IoBridge.java:438)
12-31 12:11:48.913 17218-17235/com.smpc.davidtoth.smpc W/System.err﹕ ... 13 more