【问题标题】:android creating .txt and .csv files throwing ENOENT No such file or directory exceptionandroid创建.txt和.csv文件抛出ENOENT没有这样的文件或目录异常
【发布时间】:2014-08-19 09:34:48
【问题描述】:

我创建了一个应用程序,我只是添加了将数据导出为 .txt 或 .csv 文件的功能,但在创建文件时出现错误。 logcat 中的错误显示为File write failed: java.io.IOExcepion: open failed: ENOENT (NO such file or directory)
谁能看到我在哪里犯了错误?
我调用 writeToFile() 方法传递 String txt;或字符串 csv;根据需要的文件类型放入其中。
代码:

 String txt = ".txt";
 String csv = ".csv";

 private void writeToFile(String fileType) {



        // if file name has not been entered...
        if (filename.equals("")||filename.equals(null)) {

            //display toast
            toastMsg = "Please enter a file name";
            toast();

        }

        // else if file name has been entered...
        else if (!filename.equals("")) {

            // create FileCheck
            File fileCheck = new File("/sdcard/" + filename + fileType);

            // if file exists...
            if (fileCheck.exists()) {

                // display toast
                toastMsg = "Export Error: File already exists";
                toast();


            }

            // if file does not exist...
            else if (!fileCheck.exists()) {


                try {

                    // create file
                    File myFile = new File("/sdcard/" + filename + fileType);

                    myFile.createNewFile();
                    FileOutputStream fOut = new FileOutputStream(myFile);
                    OutputStreamWriter myOSW = new OutputStreamWriter(fOut);
                    myOSW.append("file data here");
                    myOSW.close();
                    fOut.close();

                    // display toast
                    toastMsg = "file created: " + myFile.toString();
                    toast();

                }
                catch (IOException e) {
                    Log.e(TAG, "File write failed: " + e.toString());
                    toastMsg = "file write failed: " +e.toString();
                    toast();
                }

           }    
        }
    }

【问题讨论】:

    标签: java android ioexception fileoutputstream nosuchfileexception


    【解决方案1】:

    此路径不存在:

    File myFile = new File("/sdcard/" + filename + fileType);
    

    也许你的意思是:

    File myFile = new File("/mnt/sdcard/" + filename + fileType);
    

    在某些设备上可能不存在(有时这些链接路径称为 sdcard0、sdcard1、external_storage ......)

    你最好用

    File myFile = new File(Environment.getExternalStorageDirectory() + "/" + filename + fileType);
    

    并确保您设置了权限

    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    

    在您的清单中,其中还包括READ_EXTERNAL_STORAGE 权限

    【讨论】:

    • 刚刚试了一下,还是没有运气,我得到了同样的错误并且没有创建文件:/
    • 我忘记在文件名前加“/”了。
    • 添加但仍然没有,我只是不明白为什么它不起作用:(
    • 当我使用 .getExternalStorageDirectory() 时,它怎么能说目录不存在:s
    • 有趣。如果您设置了 WRITE 权限,则授予文件访问权限。然后,您将在有效路径中创建一个新文件。它必须工作。除非您没有在 锁定的模拟器上尝试它,否则您无法访问 SD 卡。
    【解决方案2】:

    您是否在清单文件中授予了这些权限?如果不给它

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

    我认为这会解决你的问题。

    【讨论】:

    • 我做到了,恐怕还是没有运气
    猜你喜欢
    • 1970-01-01
    • 2018-07-03
    • 2014-01-12
    • 1970-01-01
    • 2023-03-31
    • 1970-01-01
    • 2013-07-28
    • 2019-02-03
    • 1970-01-01
    相关资源
    最近更新 更多