【问题标题】:File not found, but it definently does exist找不到文件,但它确实存在
【发布时间】:2014-07-08 03:18:16
【问题描述】:

我在访问一个我知道存在的文件以在 BufferedReader 中使用它时遇到了无穷无尽的麻烦。 代码如下:

File file = new File(Environment.DIRECTORY_DOWNLOADS + getString(R.string.dloaded_latest_numbers_dir) + getString(R.string.dloaded_latest_numbers_file));
BufferedReader buffedReader = new BufferedReader(new FileReader(file));

但每次我点击 BufferedReader 行时,我都会收到“java.io.FileNotFoundException: /Download/MyDir/MyFile.txt: open failed: ENOENT (No such file or directory)”

我在 TextView 中显示文件位置:

TextView displayFileLocation = (TextView) findViewById(R.id.readLocTextView);
displayFileLocation.setText("location is: " + file.getAbsolutePath());

其中显示文件的正确完整路径。 (/Download/MyDir/MyFile.txt)

我的 AndroidManifest.xml 文件具有以下权限:

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"></uses-permission>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"></uses-permission>
<uses-permission android:name="android.permission.INTERNET"></uses-permission>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"></uses-permission>
<uses-permission android:name="android.permission.READ_PHONE_STATE"></uses-permission>

logcat 输出为:

07-08 13:06:28.556  15351-15351/au.com.acent.ash.basiclottochecker D/OpenGLRenderer﹕ Enabling debug mode 0
07-08 13:06:43.451  15351-15351/au.com.acent.ash.basiclottochecker W/IInputConnectionWrapper﹕ showStatusIcon on inactive InputConnection
07-08 13:06:57.925  15351-15351/au.com.acent.ash.basiclottochecker W/System.err﹕ java.io.FileNotFoundException: /Download/MyDir/MyFile.txt: open failed: ENOENT (No such file or directory)
07-08 13:06:57.925  15351-15351/au.com.acent.ash.basiclottochecker W/System.err﹕ at libcore.io.IoBridge.open(IoBridge.java:420)
07-08 13:06:57.925  15351-15351/au.com.acent.ash.basiclottochecker W/System.err﹕ at java.io.FileInputStream.<init>(FileInputStream.java:78)
07-08 13:06:57.925  15351-15351/au.com.acent.ash.basiclottochecker W/System.err﹕ at java.io.FileReader.<init>(FileReader.java:42)
07-08 13:06:57.925  15351-15351/au.com.acent.ash.basiclottochecker W/System.err﹕ at au.com.acent.ash.basiclottochecker.CheckerActivity.populateButton(CheckerActivity.java:64)
07-08 13:06:57.935  15351-15351/au.com.acent.ash.basiclottochecker W/System.err﹕ at java.lang.reflect.Method.invokeNative(Native Method)
07-08 13:06:57.935  15351-15351/au.com.acent.ash.basiclottochecker W/System.err﹕ at java.lang.reflect.Method.invoke(Method.java:525)
07-08 13:06:57.935  15351-15351/au.com.acent.ash.basiclottochecker W/System.err﹕ at android.view.View$1.onClick(View.java:3809)
07-08 13:06:57.935  15351-15351/au.com.acent.ash.basiclottochecker W/System.err﹕ at android.view.View.performClick(View.java:4421)
07-08 13:06:57.935  15351-15351/au.com.acent.ash.basiclottochecker W/System.err﹕ at android.view.View$PerformClick.run(View.java:17903)
07-08 13:06:57.935  15351-15351/au.com.acent.ash.basiclottochecker W/System.err﹕ at android.os.Handler.handleCallback(Handler.java:730)
07-08 13:06:57.935  15351-15351/au.com.acent.ash.basiclottochecker W/System.err﹕ at android.os.Handler.dispatchMessage(Handler.java:92)
07-08 13:06:57.935  15351-15351/au.com.acent.ash.basiclottochecker W/System.err﹕ at android.os.Looper.loop(Looper.java:213)
07-08 13:06:57.935  15351-15351/au.com.acent.ash.basiclottochecker W/System.err﹕ at android.app.ActivityThread.main(ActivityThread.java:5225)
07-08 13:06:57.935  15351-15351/au.com.acent.ash.basiclottochecker W/System.err﹕ at java.lang.reflect.Method.invokeNative(Native Method)
07-08 13:06:57.935  15351-15351/au.com.acent.ash.basiclottochecker W/System.err﹕ at java.lang.reflect.Method.invoke(Method.java:525)
07-08 13:06:57.935  15351-15351/au.com.acent.ash.basiclottochecker W/System.err﹕ at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:741)
07-08 13:06:57.935  15351-15351/au.com.acent.ash.basiclottochecker W/System.err﹕ at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:557)
07-08 13:06:57.935  15351-15351/au.com.acent.ash.basiclottochecker W/System.err﹕ at dalvik.system.NativeStart.main(Native Method)
07-08 13:06:57.935  15351-15351/au.com.acent.ash.basiclottochecker W/System.err﹕ Caused by: libcore.io.ErrnoException: open failed: ENOENT (No such file or directory)
07-08 13:06:57.935  15351-15351/au.com.acent.ash.basiclottochecker W/System.err﹕ at libcore.io.Posix.open(Native Method)
07-08 13:06:57.935  15351-15351/au.com.acent.ash.basiclottochecker W/System.err﹕ at libcore.io.BlockGuardOs.open(BlockGuardOs.java:110)
07-08 13:06:57.935  15351-15351/au.com.acent.ash.basiclottochecker W/System.err﹕ at libcore.io.IoBridge.open(IoBridge.java:404)
07-08 13:06:57.935  15351-15351/au.com.acent.ash.basiclottochecker W/System.err﹕ ... 17 more

我绝对肯定该文件存在,并且我已使用 DownloadManager 将该文件下载到完全相同的位置,并使用完全相同的位置引用作为目录位置:

File file = new File(Environment.DIRECTORY_DOWNLOADS + getString(R.string.dloaded_latest_numbers_dir));

我做错了什么?? 请帮忙!

【问题讨论】:

  • @JigarJoshi 似乎不是同一个问题(至少乍一看)。
  • @matiash 为什么你认为它不重复?
  • @JigarJoshi 好吧,他声称他能够在那里保存一个文件。所以我认为它应该是一个有效的路径。
  • 你检查了我在这里链接的问题吗?
  • 这是真的@matiash。我只是更新问题以解决为什么它不是重复的

标签: java android file-io


【解决方案1】:

您的代码正在尝试访问 /Download/MyDir/MyFile.txt,这似乎不是正确的位置,因为根文件夹中不存在该文件。它可能在 sdcard 目录中。要获取正确的目录,请使用

Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS)

而不是

Environment.DIRECTORY_DOWNLOADS

【讨论】:

  • 所以现在这会将我的文件下载到 /storage/emulated/0/Download/MyFile.txt 并且当我尝试将其访问到 BufferedReader 时,结果相同:找不到文件
  • 你是怎么下载的?文件下载到哪里?
  • 我不明白为什么这与原始位置有任何不同。两者都从 / 开始,我都可以写信。当您使用像 File Commander 这样的文件浏览器时,原始位置是“下载”目录。我错过了什么吗?
  • 我正在使用 DownloadManager 下载,一切正常。我使用与 BufferedReader 中的文件位置完全相同的行 File file = new File(String.valueOf(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS))); (并且我必须将您的代码封装在 String.valueOf() 中才能使其正常工作。您认为这重要吗?
  • 您可以只在末尾使用 .toString() 而不是 String.valueOf,就第一个位置而言,它试图访问 /Download/MyFile.txt 而不是它所在的位置被下载到。您还需要附加文件路径,使其类似于Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS).toString() + "/path/to/file
猜你喜欢
  • 2013-05-20
  • 2015-04-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-04-02
  • 1970-01-01
  • 2015-12-19
相关资源
最近更新 更多