无法删除本地文件 - 错误 "Is a Directory"

Can't Delete local File - Error "Is a Directory"

我在浩瀚的互联网上搜索过,但没有成功。我正在写一个文件,然后试图删除它。我的代码有一些注释掉的语句,我在其中测试了它编写一个包含来自简单字符串的内容的文件,这是有效的。但是,当我尝试让它从 EditText(转换为字符串)创建文件时出现错误。没看懂。

有人请帮我解决这个问题。

当我按下删除按钮时,出现此错误:

04-14 11:40:38.086  24584-24584/com.test.dev.write_delete_local_file E/Exception﹕ File write failed: java.io.FileNotFoundException: /data/data/com.test.dev.write_delete_local_file/files: open failed: EISDIR (Is a directory)

MainActivity.java:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    editName = (EditText)findViewById(R.id.nameEdit);
    editContent = (EditText)findViewById(R.id.contentEdit);
    btnWrite = (Button)findViewById(R.id.btnWrite);
    btnDelete = (Button)findViewById(R.id.btnDelete);

    fileContents = (String) editContent.getText().toString();
    fileName = (String) editName.getText().toString();

    btnWrite.setOnClickListener(new View.OnClickListener(){
        @Override
        public void onClick(View v){

            writeFile(fileName, fileContents);
        }

    });

    btnDelete.setOnClickListener(new View.OnClickListener(){
        @Override
        public void onClick(View v){
            deleteTheFile(fileName);
        }

    });
}


@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.menu_main, menu);
    return true;
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    // Handle action bar item clicks here. The action bar will
    // automatically handle clicks on the Home/Up button, so long
    // as you specify a parent activity in AndroidManifest.xml.
    int id = item.getItemId();

    //noinspection SimplifiableIfStatement
    if (id == R.id.action_settings) {
        return true;
    }

    return super.onOptionsItemSelected(item);
}

private void writeFile(String name, String data) {
    try {
        OutputStreamWriter outputStreamWriter = new OutputStreamWriter(openFileOutput(name, Context.MODE_PRIVATE));
        //OutputStreamWriter outputStreamWriter = new OutputStreamWriter(openFileOutput("test.txt", Context.MODE_PRIVATE));
        outputStreamWriter.write(data);
        //outputStreamWriter.write("abcdefghijklmnop");
        outputStreamWriter.close();

        Toast.makeText(this.getBaseContext(), (CharSequence) this.getFilesDir().toString(), Toast.LENGTH_SHORT).show();
    }
    catch (IOException e) {
        Log.e("Exception", "File write failed: " + e.toString());
    }
}

public void deleteTheFile(String name){
    File chosenFile = context.getFileStreamPath(name);
    //File chosenFile = this.getFileStreamPath("test.txt");
    boolean fileDeleted = chosenFile.delete();
    if (fileDeleted) {
        Log.d(TAG, name + " was deleted");
    } else {
        Log.d(TAG, name + " was not deleted");
    }

}

我认为这是因为你的文件名是在 onCreate 方法中初始化的,所以如果你的 editTextXML 布局定义中没有文本,fileName 将为空。

您应该在 btnDelete 点击侦听器中调用 (String) editName.getText().toString()。或者为 editText 设置文本更改侦听器,并在每次文本更改时更新 fileName 字段。