Android没有创建文件

时间:2013-11-25 20:47:25

标签: java android eclipse csv

我希望在单击按钮时将此片段写入csv文件,但我不断收到java.io.IOException:open failed:ENOENT(没有这样的文件或目录)。任何帮助将不胜感激。

public class AddFragment extends Fragment {

    static EditText spent,saved,coupons;
    Button writeExcelButton;
    String data;
    Spinner spinner;

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {

        View view = inflater.inflate(R.layout.add_layout, container, false);

        setSpinnerContent(view);

        spent = (EditText) view.findViewById(R.id.spent1);
        saved = (EditText) view.findViewById(R.id.saved1);
        coupons = (EditText) view.findViewById(R.id.coupons1);

        writeExcelButton = (Button) view.findViewById(R.id.button_addGroc);
        writeExcelButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
              updateSheet();
            }
        });

        return view;
    }

    private void setSpinnerContent (View view) {
        spinner = (Spinner) view.findViewById(R.id.groc_store);
        ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(getActivity(),
            R.array.store1, android.R.layout.simple_spinner_item);
        adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
        spinner.setAdapter(adapter);
    }

    public void updateSheet() {
        try {
            // This is the string that should be written to file
            String mySpin =spinner.getSelectedItem().toString();
            data = mySpin + "," + spent.getText().toString() + "," + saved.getText().toString() + "," + coupons.getText().toString() + "/n";

            // This is the file that should be written to
            String sdCard = Environment.getExternalStorageDirectory().toString();
            File dir = new File(sdCard + "/dir");
            if (!dir.exists()) {
                dir.mkdir();
            }

            File myFile = new File(dir.getAbsolutePath(), "savings.csv");

            // if file doesn't exists, then create it
            if (!myFile.exists()) {
                myFile.createNewFile();
            }

        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

这就是我的LogCat的样子

11-14 13:29:23.681: W/System.err(14386): java.io.IOException: open failed: ENOENT (No such file or directory)
11-14 13:29:23.681: W/System.err(14386):    at java.io.File.createNewFile(File.java:948)
11-14 13:29:23.691: W/System.err(14386):    at com.example.myfirstapp.AddFragment.updateSheet(AddFragment.java:101)
11-14 13:29:23.691: W/System.err(14386):    at com.example.myfirstapp.AddFragment$1.onClick(AddFragment.java:59)
11-14 13:29:23.691: W/System.err(14386):    at android.view.View.performClick(View.java:4240)
11-14 13:29:23.691: W/System.err(14386):    at android.view.View$PerformClick.run(View.java:17721)
11-14 13:29:23.691: W/System.err(14386):    at android.os.Handler.handleCallback(Handler.java:730)
11-14 13:29:23.691: W/System.err(14386):    at android.os.Handler.dispatchMessage(Handler.java:92)
11-14 13:29:23.691: W/System.err(14386):    at android.os.Looper.loop(Looper.java:137)
11-14 13:29:23.691: W/System.err(14386):    at android.app.ActivityThread.main(ActivityThread.java:5103)
11-14 13:29:23.691: W/System.err(14386):    at java.lang.reflect.Method.invokeNative(Native Method)
11-14 13:29:23.691: W/System.err(14386):    at java.lang.reflect.Method.invoke(Method.java:525)
11-14 13:29:23.701: W/System.err(14386):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:737)
11-14 13:29:23.711: W/System.err(14386):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
11-14 13:29:23.711: W/System.err(14386):    at dalvik.system.NativeStart.main(Native Method)
11-14 13:29:23.711: W/System.err(14386): Caused by: libcore.io.ErrnoException: open failed: ENOENT (No such file or directory)
11-14 13:29:23.711: W/System.err(14386):    at libcore.io.Posix.open(Native Method)
11-14 13:29:23.711: W/System.err(14386):    at libcore.io.BlockGuardOs.open(BlockGuardOs.java:110)
11-14 13:29:23.711: W/System.err(14386):    at java.io.File.createNewFile(File.java:941)

2 个答案:

答案 0 :(得分:23)

尝试更改

dir.mkdir();

dir.mkdirs();

另请尝试传递dir而不是dir.getAbsolutePath()

修改

此外,您不希望像这样连接文件路径。尝试:

File myFile = new File(Environment.getExternalStorageDirectory(), "dir/savings.csv");
if (!myFile.exists()) {
     myFile.mkdirs();
     myFile.createNewFile();
}

答案 1 :(得分:9)

在清单中添加此权限。

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