我尝试在内存中的文件夹中保存txt文件,但每次都遇到同样的问题:
“未找到来源”
我用不同的方式编写我的代码,如下所示,但在各方面我都有同样的问题。
值得说的是我甚至添加
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
毋庸置疑,我在 / data / data / package / files 路径中保存文件没有任何问题,但是当我在文件的根目录中添加我的文件夹时,例如 /data/data/package/files/myforlder/myfile.txt 我遇到“未找到来源”问题。
你能指出我正确的方向来解决这个问题吗?
第二个问题是,用于将文件保存在外部存储器中的外部文件夹中 (例如:sdCard或USB存储)场景是不同的还是相同?
第一种方式:
OutputStreamWriter out;
try {
File path=new File(getFilesDir(),"myfolder");
File mypath=new File(path,"myfile.txt");
if (!mypath.exists()) {
out = new OutputStreamWriter(openFileOutput( mypath.getAbsolutePath() , MODE_PRIVATE));
out.write("test");
out.close();
}
}
第二种方式:
OutputStreamWriter out;
try {
ContextWrapper cw = new ContextWrapper(this);
File path = cw.getDir("myfolder", Context.MODE_PRIVATE);
if (!path.exists()) {
path.createNewFile();
path.mkdir();
}
File mypath=new File(path,"myfile.txt");
if (!mypath.exists()) {
out = new OutputStreamWriter(openFileOutput( mypath.getAbsolutePath() , MODE_PRIVATE));
out.write("test");
out.close();
}
}
第三种方式:
File path=getFilesDir();
String mypath=path.toString() + "/myfolder";
OutputStreamWriter out;
try {
File f = new File(mypath , "/myfile.txt" );
out = new OutputStreamWriter(openFileOutput(f.getPath(), MODE_PRIVATE));
out.write("test");
out.close();
}
第四种方式:
File path=getFilesDir();
OutputStreamWriter out;
try {
File f = new File(path.getPath() + "/myfolder/myfile.txt" );
out = new OutputStreamWriter(openFileOutput(f.getPath(), MODE_PRIVATE));
out.write("test");
out.close();
}
第五种方式:
File path=getFilesDir();
OutputStreamWriter out;
try {
File f = new File(path.getCanonicalPath() + "/myfile.txt");
out = new OutputStreamWriter(openFileOutput( f.getPath(), MODE_PRIVATE));
out.write("test");
out.close();
}
答案 0 :(得分:61)
第一种方式:
您没有创建目录。此外,您将绝对路径传递给openFileOutput()
,这是错误的。
第二种方式:
您创建了一个具有所需名称的空文件,这会阻止您创建目录。此外,您将绝对路径传递给openFileOutput()
,这是错误的。
第三种方式:
您没有创建目录。此外,您将绝对路径传递给openFileOutput()
,这是错误的。
第四种方式:
您没有创建目录。此外,您将绝对路径传递给openFileOutput()
,这是错误的。
第五种方式:
您没有创建目录。此外,您将绝对路径传递给openFileOutput()
,这是错误的。
正确的方式:
File
)File path=new File(getFilesDir(),"myfolder");
mkdirs()
上调用File
以创建目录(如果该目录不存在)File
(例如File mypath=new File(path,"myfile.txt");
)File
发送信息(例如,使用new BufferedWriter(new FileWriter(mypath))
)答案 1 :(得分:11)
保存:
public boolean saveFile(Context context, String mytext){
Log.i("TESTE", "SAVE");
try {
FileOutputStream fos = context.openFileOutput("file_name"+".txt",Context.MODE_PRIVATE);
Writer out = new OutputStreamWriter(fos);
out.write(mytext);
out.close();
return true;
} catch (IOException e) {
e.printStackTrace();
return false;
}
}
负载:
public String load(Context context){
Log.i("TESTE", "FILE");
try {
FileInputStream fis = context.openFileInput("file_name"+".txt");
BufferedReader r = new BufferedReader(new InputStreamReader(fis));
String line= r.readLine();
r.close();
return line;
} catch (IOException e) {
e.printStackTrace();
Log.i("TESTE", "FILE - false");
return null;
}
}
答案 2 :(得分:1)
Mintir4的答案很好,我会在加载时执行以下操作(为了读取所有行)
FileInputStream fis = myContext.openFileInput(fn);
BufferedReader r = new BufferedReader(new InputStreamReader(fis));
String s = "";
while ((s = r.readLine()) != null) {
txt += s;
}
r.close();