我正在尝试使用以下代码将一些简单数据写入外部存储。我在这里遗漏了一些东西,但不确定是什么。感谢
RobD
公共类TimeCard扩展Activity { /** 在第一次创建活动时调用。 * / @覆盖 public void onCreate(Bundle savedInstanceState){ super.onCreate(savedInstanceState); 的setContentView(R.layout.main);
final Button button = (Button) findViewById(R.id.Button01);
final EditText edittext = (EditText) findViewById(R.id.EditText01);
final EditText edittext1 = (EditText)findViewById(R.id.EditText02);
final EditText edittext2 = (EditText)findViewById(R.id.EditText03);
final EditText edittext3 = (EditText)findViewById(R.id.EditText04);
final String inputString = edittext + "/n" + edittext1 + "/n"+ edittext2 + "/n" + edittext3;
button.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
//Do it
CreateFile(inputString);
//Let them know it
Toast.makeText(TimeCard.this, "You are Clocked In", Toast.LENGTH_LONG).show();
}
});
}
//Write to SD Card
public void CreateFile(String InputString){
File SDCard = Environment.getExternalStorageDirectory();
String FILENAME = SDCard + "/time_card.txt";
FileOutputStream fos = null;
try {
fos = openFileOutput(FILENAME, Context.MODE_WORLD_READABLE);
} catch (FileNotFoundException e) {
e.printStackTrace();
}
try {
fos.write(InputString.getBytes());
} catch (IOException e) {
e.printStackTrace();
}
try {
fos.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
答案 0 :(得分:3)
我尝试运行您的代码,错误是由您使用openFileOutput(String name, int mode)
方法的方式引起的。在LogCat中查看,我可以看到以下异常:
java.lang.IllegalArgumentException: File /mnt/sdcard/time_card.txt contains a path separator
这指向了this question答案的方向,这也可能解决你的问题:
Context.openFileOutput意味着 用于创建私有文件 你的申请。他们进入你的 app的私人数据目录。您 提供名称,而不是路径
documentation for openFileOutput也表明这个函数的名称参数:
要打开的文件的名称;不能 包含路径分隔符。
对于将来的参考,当您遇到这样的问题时,了解如何使用可用的工具(例如LogCat)绝对至关重要。没有他们,你将很难搞清楚什么是错的。所以我建议你阅读一下如何做到这一点。
答案 1 :(得分:1)
很难说你什么时候没有显示你得到的错误信息。但我的第一个猜测是,您忘记在WRITE_EXTERNAL_STORAGE
文件中加入AndroidManifest.xml权限。