我正在开发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();
}
答案 0 :(得分:2)
确保您拥有:<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /
&gt;在你的清单中。
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);
}
}
答案 1 :(得分: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" />
”。
答案 2 :(得分:1)
目前不需要WRITE_EXTERNAL_STORAGE。这不是问题。
问题是您正在尝试使用私有存储路径的文件。
openFileOutput()打开一个文件,用于写入您的私人区域。 filename参数不能包含路径。参考文档说: “要打开的文件的名称;不能包含路径分隔符。” (见reference doc for openFileOutput)。要写入内部存储,只需使用openFileOutput(“test.txt”,Context.MODE_PRIVATE)。没有理由设置任何其他模式;您的应用是唯一可以访问该文件的应用。
如果要写入外部存储,请使用getExternalFilesDir(),指定子目录的类型(如果需要),然后使用普通的java.io. *对象(如File)写入文件。参考文档显示了一个示例。请注意,外部存储中的文件对其他应用程序可见。