我正在尝试写一个名为“filename.txt”的新文件,并在打开应用程序时写出“hi”。我该怎么做?我在Eclipse中运行此代码,按F11,打开AVD,然后单击应用程序。我得到了“Hello World,appname!”消息,但没有创建文件。
package com.paad.comparison;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import android.app.Activity;
import android.content.Context;
import android.os.Bundle;
import android.os.Environment;
import android.widget.Toast;
public class ComparisonOfControlCreationActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
String string1 = "Hey you";
FileWriter fWriter;
try{
fWriter = new FileWriter("filename.txt", true);
fWriter.write("hi");
fWriter.flush();
fWriter.close();
} catch(Exception e) {
e.printStackTrace();
}
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
}
}
编辑:对于将来碰巧遇到此问题的任何人,请确保您的AndroidManifest.xml文件具有该行
< uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
没有&之间的空间。和你
答案 0 :(得分:6)
试试这样:
FileWriter fWriter;
File sdCardFile = new File(Environment.getExternalStorageDirectory() + " \filename.txt");
Log.d("TAG", sdCardFile.getPath()); //<-- check the log to make sure the path is correct.
try{
fWriter = new FileWriter(sdCardFile, true);
fWriter.write("hi");
fWriter.flush();
fWriter.close();
}catch(Exception e){
e.printStackTrace();
}
答案 1 :(得分:3)
您需要在关闭文件之前致电sync()
,但是您需要FileDescriptor
,我不相信它可以直接来自FileWriter
。但是,您可以使用FileWriter
创建FileDescriptor
对象,FileOutputStream
可以为此目的提供一个。{/ p>
以下是基于您的初始代码,但我选择在我的示例中将文件存储在SD卡上,因此要运行下面的代码您的应用清单需要正确在<application>
代码之前添加了权限。
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
也就是说,如果要将文件直接存储在设备上,结果将不会受到影响。
代码(在Desire HD上测试):
package com.paad.comparison;
import java.io.FileOutputStream;
import java.io.FileWriter;
import android.app.Activity;
import android.os.Bundle;
public class ComparisonOfControlCreationActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
String string1 = "Hey you";
FileOutputStream fos ;
try {
fos = new FileOutputStream("/sdcard/filename.txt", true);
FileWriter fWriter;
try {
fWriter = new FileWriter(fos.getFD());
fWriter.write("hi");
fWriter.close();
} catch (Exception e) {
e.printStackTrace();
} finally {
fos.getFD().sync();
fos.close();
}
} catch (Exception e) {
e.printStackTrace();
}
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
}
}
最后,当flush()
调用close()
时,在flush()
之前调用close()
是多余的,尽管没有害处。