Java 将字符串数组列表保存到内部文件目录
我目前正在开发一个android应用程序,在运行时生成一些用户数据,这些数据保存在两个Java 将字符串数组列表保存到内部文件目录,java,android,internal-storage,Java,Android,Internal Storage,我目前正在开发一个android应用程序,在运行时生成一些用户数据,这些数据保存在两个ArrayList中。一旦应用程序关闭,我需要将数据保存到内存中,但在我的logcat中,我总是得到错误IOException file not found 我不明白为什么总是这样。以下是我的活动代码。请帮帮我 import java.io.BufferedReader; import java.io.DataInputStream; import java.io.DataOutput
ArrayList
中。一旦应用程序关闭,我需要将数据保存到内存中,但在我的logcat中,我总是得到错误IOException file not found
我不明白为什么总是这样。以下是我的活动代码。请帮帮我
import java.io.BufferedReader;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;
import android.content.Intent;
import android.os.Bundle;
import android.support.v7.app.ActionBar;
import android.support.v7.app.ActionBarActivity;
import android.text.Html;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.View;
import android.widget.Button;
public class MainActivity extends ActionBarActivity {
public static ArrayList<String> myArrayList=new ArrayList<String>();
public static ArrayList<String> myArrayListwr=new ArrayList<String>();
static int close=1;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
close=1;
System.out.println("Oncreate called");
try{
final File dir = new File(getApplicationContext().getFilesDir() + "/file");
if(!(dir.exists()))
{
dir.mkdirs(); //create folders where write files
}
final File file = new File(dir+ "/lines.txt");
if(!(file.exists())) {
file.createNewFile();
}
BufferedReader br = new BufferedReader(new FileReader(file));
if (br.readLine() == null) {
close=0;
}
br.close();
}
catch (IOException exc) { exc.printStackTrace(); }
try {
if(myArrayList.size()==0 && close!=0)
{
System.out.println("retriving data from file lines");
FileInputStream input =openFileInput("lines.txt"); // Open input stream
DataInputStream din = new DataInputStream(input);
int sz = din.readInt(); // Read line count
for (int i=0;i<sz;i++) { // Read lines
String line = din.readUTF();
myArrayList.add(line);
}
din.close();
}
}
catch (IOException exc) { exc.printStackTrace(); }
try {
if(myArrayListwr.size()==0 && close!=0)
{
System.out.println("retriving data from file lineswr");
final File dirwr = new File(getApplicationContext().getFilesDir() + "/file");
if(!dirwr.exists())
dirwr.mkdirs(); //create folders where write files
final File filewr = new File(dirwr+ "/lineswr.txt");
if(!filewr.exists()) {
filewr.createNewFile();
}
FileInputStream inputwr = openFileInput("lineswr.txt"); // Open input stream
DataInputStream dinwr = new DataInputStream(inputwr);
int szwr = dinwr.readInt(); // Read line count
for (int iwr=0;iwr<szwr;iwr++) { // Read lines
String linewr = dinwr.readUTF();
myArrayListwr.add(linewr);
}
dinwr.close();
}
}
catch (IOException exc) { exc.printStackTrace(); }
Button phy = (Button) findViewById(R.id.button3);
Button mat = (Button) findViewById(R.id.button1);
Button bio = (Button) findViewById(R.id.button2);
Button chem = (Button) findViewById(R.id.button4);
}
@Override
public void onBackPressed() {
super.onBackPressed();
try {
if(myArrayList.size()!=0)
{
System.out.println("inside on back pressed saving data to lines");
//Modes: MODE_PRIVATE, MODE_WORLD_READABLE, MODE_WORLD_WRITABLE
String fileName = getApplicationContext().getFilesDir()+"/file/"+ "lines.txt";
FileOutputStream output = openFileOutput("lines.txt",MODE_PRIVATE);
DataOutputStream dout = new DataOutputStream(output);
dout.writeInt(myArrayList.size()); // Save line count
for(String line : myArrayList) // Save lines
dout.writeUTF(line);
dout.flush(); // Flush stream ...
dout.close(); // ... and close.
}
}
catch (IOException exc) { exc.printStackTrace(); }
try {
if(myArrayListwr.size()!=0)
{
System.out.println("inside on back pressed saving data to lineswr");
//Modes: MODE_PRIVATE, MODE_WORLD_READABLE, MODE_WORLD_WRITABLE
String fileNamewr = getApplicationContext().getFilesDir()+"/file/"+ "lineswr.txt";
FileOutputStream outputwr = openFileOutput("lineswr.txt",MODE_PRIVATE);
DataOutputStream doutwr = new DataOutputStream(outputwr);
doutwr.writeInt(myArrayListwr.size()); // Save line count
for(String linewr : myArrayListwr) // Save lines
doutwr.writeUTF(linewr);
doutwr.flush(); // Flush stream ...
doutwr.close(); // ... and close.
}
}
catch (IOException exc) { exc.printStackTrace(); }
Intent intent = new Intent(MainActivity.this, MainActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
intent.putExtra("EXIT", true);
startActivity(intent);
}
}
导入java.io.BufferedReader;
导入java.io.DataInputStream;
导入java.io.DataOutputStream;
导入java.io.File;
导入java.io.FileInputStream;
导入java.io.FileOutputStream;
导入java.io.FileReader;
导入java.io.IOException;
导入java.util.ArrayList;
导入android.content.Intent;
导入android.os.Bundle;
导入android.support.v7.app.ActionBar;
导入android.support.v7.app.ActionBarActivity;
导入android.text.Html;
导入android.view.Menu;
导入android.view.MenuInflater;
导入android.view.view;
导入android.widget.Button;
公共类MainActivity扩展了ActionBarActivity{
公共静态ArrayList myArrayList=新建ArrayList();
public static ArrayList myArrayListwr=new ArrayList();
静态int close=1;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
关闭=1;
System.out.println(“调用Oncreate”);
试试{
final File dir=新文件(getApplicationContext().getFilesDir()+“/File”);
如果(!(目录存在())
{
dir.mkdirs();//创建用于写入文件的文件夹
}
最终文件=新文件(dir+“/lines.txt”);
如果(!(file.exists())){
createNewFile();
}
BufferedReader br=新的BufferedReader(新文件读取器(文件));
if(br.readLine()==null){
关闭=0;
}
br.close();
}
catch(IOException exc){exc.printStackTrace();}
试一试{
如果(myArrayList.size()=0&&close!=0)
{
System.out.println(“从文件行中检索数据”);
FileInputStream输入=openFileInput(“lines.txt”);//打开输入流
DataInputStream din=新的DataInputStream(输入);
int sz=din.readInt();//读取行计数
for(int i=0;iYou正在打开多个文件。是否可以打印语句并检查打印错误的代码部分。在catch子句下,编写简单的打印语句(和代码标识)。然后检查目录中是否存在该文件。您的代码运行正常。您可以发布错误日志信息吗?@alijandrowait@user3337714当iam执行此操作时,它显示文件已创建,但iam仍收到IO异常