在 android 应用程序中写入和保存文件
writing and saving a file in android application
我试图在按下按钮 Save_btn
时写入文件,但是,当我 运行 应用程序时,它 运行 很顺利,没有错误,但是文件无处可去找到了。
我正在尝试写入设备的内部存储器。正在编写的文本位于编辑文本字段中。我希望将 EditText 中的这段文本写入文件
我在下面包含了我正在使用的代码;
Save_btn = (Button) findViewById(R.id.g);
Save_btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View views) {
TextView CodeView = (TextView) findViewById(R.id.Code_Viewer);
CodeView.setText(CodeView.getText());
try {
String etName = CodeView.getText().toString();
if (!etName.trim().equals("")) {
File file = new File("/Documents/test.txt");
//if file doesnt exists, then create it
if (!file.exists()) {
file.createNewFile();
}
FileWriter fileWritter = new FileWriter(file.getName(), true);
BufferedWriter bufferWritter = new BufferedWriter(fileWritter);
bufferWritter.write(etName);
bufferWritter.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
);
任何关于如何正确写入文件的建议都将不胜感激。
提前致谢。
我不确定这是否可行,因为您指定的文件路径是 a) 绝对路径和 b) 指向您可能没有写入权限的目录。
File file = new File("/Documents/test.txt");
这引用了文件系统根目录中的 Documents
文件夹,而不是您的应用程序文件。
如果你想将它保存在本地以便在你自己的应用程序中使用,你可以尝试Context#getFilesDir,例如
File file = new File(context.getFilesDirectory(), "yourfile.txt");
如果您想将它保存在其他应用程序可以使用它的地方,您可能需要更复杂的方法,例如FileProvider.
你应该使用
File file = new File(context.getFilesDir(), "test.txt");
而不是
File file = new File("/Documents/test.txt");
保存到您的内部存储。您的其余代码可以保持不变。
用您的代码替换此代码:
Save_btn = (Button) findViewById(R.id.g);
Save_btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View views) {
TextView CodeView = (TextView) findViewById(R.id.Code_Viewer);
CodeView.setText(CodeView.getText());
String etName = CodeView.getText().toString();
File dir = new File(getFilesDir(), "yourfolder");
if(!dir.exists())
{
dir.mkdirs();
}
String textFileName="textFile.txt";
File file = new File(dir.getPath(), textFileName );
if(file.exists())
{
file.delete();
}
try {
FileWriter fw = new FileWriter(file);
BufferedWriter bw = new BufferedWriter(fw);
bw.write(etName);
bw.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
);
您应该注意以下几点:
- 此代码将在 /data/data/[您的应用程序包名称]/files/[您的文件夹]/[您的文本文件名]
上创建文件
- 如果文件名相同,它总是会删除您的文件,因此您应该为每个文件取一个唯一的名称。(您可以在文件名中包含日期和时间)
我试图在按下按钮 Save_btn
时写入文件,但是,当我 运行 应用程序时,它 运行 很顺利,没有错误,但是文件无处可去找到了。
我正在尝试写入设备的内部存储器。正在编写的文本位于编辑文本字段中。我希望将 EditText 中的这段文本写入文件
我在下面包含了我正在使用的代码;
Save_btn = (Button) findViewById(R.id.g);
Save_btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View views) {
TextView CodeView = (TextView) findViewById(R.id.Code_Viewer);
CodeView.setText(CodeView.getText());
try {
String etName = CodeView.getText().toString();
if (!etName.trim().equals("")) {
File file = new File("/Documents/test.txt");
//if file doesnt exists, then create it
if (!file.exists()) {
file.createNewFile();
}
FileWriter fileWritter = new FileWriter(file.getName(), true);
BufferedWriter bufferWritter = new BufferedWriter(fileWritter);
bufferWritter.write(etName);
bufferWritter.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
);
任何关于如何正确写入文件的建议都将不胜感激。
提前致谢。
我不确定这是否可行,因为您指定的文件路径是 a) 绝对路径和 b) 指向您可能没有写入权限的目录。
File file = new File("/Documents/test.txt");
这引用了文件系统根目录中的 Documents
文件夹,而不是您的应用程序文件。
如果你想将它保存在本地以便在你自己的应用程序中使用,你可以尝试Context#getFilesDir,例如
File file = new File(context.getFilesDirectory(), "yourfile.txt");
如果您想将它保存在其他应用程序可以使用它的地方,您可能需要更复杂的方法,例如FileProvider.
你应该使用
File file = new File(context.getFilesDir(), "test.txt");
而不是
File file = new File("/Documents/test.txt");
保存到您的内部存储。您的其余代码可以保持不变。
用您的代码替换此代码:
Save_btn = (Button) findViewById(R.id.g);
Save_btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View views) {
TextView CodeView = (TextView) findViewById(R.id.Code_Viewer);
CodeView.setText(CodeView.getText());
String etName = CodeView.getText().toString();
File dir = new File(getFilesDir(), "yourfolder");
if(!dir.exists())
{
dir.mkdirs();
}
String textFileName="textFile.txt";
File file = new File(dir.getPath(), textFileName );
if(file.exists())
{
file.delete();
}
try {
FileWriter fw = new FileWriter(file);
BufferedWriter bw = new BufferedWriter(fw);
bw.write(etName);
bw.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
);
您应该注意以下几点:
- 此代码将在 /data/data/[您的应用程序包名称]/files/[您的文件夹]/[您的文本文件名] 上创建文件
- 如果文件名相同,它总是会删除您的文件,因此您应该为每个文件取一个唯一的名称。(您可以在文件名中包含日期和时间)