我正在开发一个简单的android应用程序,我需要在内部存储设备中编写一个文本文件。我知道关于这个问题有很多问题(和答案),但我真的无法理解我在做错的方式。
这是我在活动中使用的一段代码,用于编写文件:
public void writeAFile(){
String fileName = "myFile.txt";
String textToWrite = "This is some text!";
FileOutputStream outputStream;
try {
outputStream = openFileOutput(fileName , Context.MODE_PRIVATE);
outputStream.write(textToWrite.getBytes());
outputStream.close();
} catch (Exception e) {
e.printStackTrace();
}
}
我真的不明白我在做什么错。另外,我在Android Studio和我的手机上的模拟器上尝试了this项目,以便了解我做错了什么,但即使使用该项目,也不会在手机或模拟器上写入任何文件。< / p>
编辑: 我知道没有文件写入我的内部存储器,因为在我写完文件之后,我尝试使用以下代码读取文件的内容:
public void ReadBtn(View v) {
//reading text from file
try {
FileInputStream fileIn=openFileInput("myFile.txt");
InputStreamReader InputRead= new InputStreamReader(fileIn);
char[] inputBuffer= new char[READ_BLOCK_SIZE];
String s="";
int charRead;
while ((charRead=InputRead.read(inputBuffer))>0) {
String readstring=String.copyValueOf(inputBuffer,0,charRead);
s +=readstring;
}
InputRead.close();
textmsg.setText(s);
} catch (Exception e) {
e.printStackTrace();
}
}
根本没有显示任何内容。
答案 0 :(得分:16)
使用以下代码将文件写入内部存储器
编辑:添加e.printStackTrace();
以阻止阻止作为良好做法和权限提醒
public void writeFileOnInternalStorage(Context mcoContext,String sFileName, String sBody){
File file = new File(mcoContext.getFilesDir(),"mydir");
if(!file.exists()){
file.mkdir();
}
try{
File gpxfile = new File(file, sFileName);
FileWriter writer = new FileWriter(gpxfile);
writer.append(sBody);
writer.flush();
writer.close();
}catch (Exception e){
e.printStackTrace();
}
}
并且不要忘记在清单中添加外部存储写入和读取权限:
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
答案 1 :(得分:9)
手机或模拟器上都没有写入任何文件。
是的,有。它被写入Android SDK引用的internal storage。这不 作为用户认为是&#34;内部存储&#34;,而您作为用户无法看到设备内部存储中的内容(除非它扎根)。
如果要将文件写入用户可以看到的位置,请使用external storage。
这个基本的Android开发主题在Android应用程序开发的任何体面的书中都有介绍。
答案 2 :(得分:1)
保存到内部存储空间
data="my Info to save";
try {
FileOutputStream fOut = openFileOutput(file,MODE_WORLD_READABLE);
fOut.write(data.getBytes());
fOut.close();
Toast.makeText(getBaseContext(),"file saved",Toast.LENGTH_SHORT).show();
}
catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
从内部存储中读取
try {
FileInputStream fin = openFileInput(file);
int c;
String temp="";
while( (c = fin.read()) != -1){
temp = temp + Character.toString((char)c);
}
tv.setText(temp);
Toast.makeText(getBaseContext(),"file read",Toast.LENGTH_SHORT).show();
}
catch(Exception e){
}
答案 3 :(得分:0)
您是否已请求写入外部存储的权限?
https://developer.android.com/training/basics/data-storage/files.html#GetWritePermission
也许你的try \ catch块吞噬了一个可以告诉你问题是什么的异常。
此外,您似乎没有设置保存到的路径。
例如:Android how to use Environment.getExternalStorageDirectory()
答案 4 :(得分:-1)
要查看设备上的文件,您可以记录文件位置>由File.getAbsolutePath()之类的方法提供,然后>然后使用Android Studio的设备>文件资源管理器浏览设备文件。
我有一个类似的问题,文件已写入,但我从未看到过。我使用了设备文件浏览器,它在那里等着我。
String filename = "filename.jpg";
File dir = context.getFilesDir();
File file = new File(dir, filename);
try {
Log.d(TAG, "The file path = "+file.getAbsolutePath());
file.createNewFile();
} catch (Exception e) {
e.printStackTrace();
}
return true;