0

我正在开发一个 Android 应用程序,我想写入一个文本文件。但是在单击写入按钮后,该应用程序向我显示一条错误消息并停止。错误是

IllegalArgumentException:文件 mnt/sdcard/test.txt 包含路径分隔符

我使用了以下代码:

try {
    final String TESTSTRING = new String("Hello Android");

    FileOutputStream fOut = openFileOutput("mnt/sdcard/test.txt",
                                               MODE_WORLD_READABLE);
    OutputStreamWriter osw = new OutputStreamWriter(fOut); 

    osw.write(TESTSTRING);

    osw.flush();
    osw.close();
} catch (IOException ioe) {
    ioe.printStackTrace();
}
4

3 回答 3

2

确保你有:<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 在你的清单中。

 package com.example.fileio;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.PrintStream;

import android.app.Activity;
import android.os.Bundle;
import android.os.Environment;
import android.util.Log;
import android.widget.TextView;

public class FilioActivity extends Activity {

    private TextView tv;
    private static final String TAG = "MEDIA";

    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        tv = (TextView) findViewById(R.id.TextView01);

        CreateExternalLogFile("I am adding something into the text file!");
    }

private void CreateExternalLogFile(String s){
    File sdCard = Environment.getExternalStorageDirectory();
    File dir = new File (sdCard.getAbsolutePath());
    dir.mkdirs();
    File file = new File(dir, "filename.txt");
    tv.append("\nExternal file system root: "+ dir);
    try {
        FileOutputStream f = new FileOutputStream(file,false); //True = Append to file, false = Overwrite
        PrintStream p = new PrintStream(f);
        p.print(s);
        p.close();
        f.close();


    } catch (FileNotFoundException e) {
        e.printStackTrace();
        Log.i(TAG, "******* File not found. Did you" +
                        " add a WRITE_EXTERNAL_STORAGE permission to the manifest?");
    } catch (IOException e) {
        e.printStackTrace();
    }   
    tv.append("\nFile written to \n"+file);


}
}
于 2013-08-30T19:01:10.520 回答
1

当前不需要 WRITE_EXTERNAL_STORAGE。这不是问题。

问题是您正在尝试使用私有存储路径的文件。

openFileOutput() 打开一个文件以写入您的私人区域。文件名参数不能包含路径。参考文档说:“要打开的文件的名称;不能包含路径分隔符。” (请参阅openFileOutput 的参考文档)。要写入内部存储,只需使用 openFileOutput("test.txt", Context.MODE_PRIVATE)。没有理由设置任何其他模式;您的应用程序是唯一可以访问该文件的应用程序。

如果要写入外部存储,请使用getExternalFilesDir(),指定子目录的类型(如果需要),然后使用普通的 java.io.* 对象(例如 File)写入文件。参考文档显示了一个示例。请注意,外部存储中的文件对其他应用程序可见。

于 2013-08-30T20:50:09.213 回答
1
 Try something like this      

       try {
         File myFile = new File("/sdcard/sample.txt");

         // added extra

         myFile.createNewFile(); 

         FileOutputStream fOut = new FileOutputStream(myFile);
         OutputStreamWriter myOutWriter = 
         new OutputStreamWriter(fOut);    
         myOutWriter.close();
         fOut.close();
      }

不要忘记<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />在您的清单中添加“”。

于 2013-08-30T19:02:20.917 回答