在多个文本框中从SD卡检索数据

时间:2012-02-29 19:44:13

标签: android

用于保存在SD卡中的代码,我已经在注册的onclicklistner中声明了按钮保存,如下所示:

        btn.setOnClickListener(new View.OnClickListener()
        {       
    EditText filename =(EditText) findViewById(R.id.filename);
            EditText filecontent =(EditText) findViewById(R.id.filecontent);
       public void onClick(View view) 
        {

        String str = filename.getText().toString();
        String str2= filecontent.getText().toString();

            File sdCard = Environment.getExternalStorageDirectory();
            File directory = new File (sdCard.getAbsolutePath()+"/MyFiles");
            directory.mkdirs();
            File file = new File(directory,"textfile.txt");
                    FileOutputStream fOut = new FileOutputStream(file);
            OutputStreamWriter osw = new OutputStreamWriter(fOut);
                osw.write(str);
            osw.write("   ");
            osw.write(str2);
                    osw.close();


        }

       } 

在加载按钮上我已经在定义的块中注册了onclicklistener         private static final int READ_BLOCK_SIZE = 100; 加载代码是:

    Button load = (Button) findViewById(R.id.load);
    load.setOnClickListener(new View.OnClickListener() {
EditText filename =(EditText) findViewById(R.id.filename);
    EditText filecontent =(EditText) findViewById(R.id.filecontent);
    public void onClick(View v) {

       File sdCard = Environment.getExternalStorageDirectory();
        File directory = new File (sdCard.getAbsolutePath() +
        "/MyFiles");
        File file = new File(directory, "textfile.txt");

        FileInputStream fIn = new FileInputStream(file);
        InputStreamReader isr = new InputStreamReader(fIn);
             char[] inputBuffer = new char[READ_BLOCK_SIZE];
        String s = "";
        int charRead;

    while ((charRead = isr.read(inputBuffer))>0)
    {
        //---convert the chars to a String---
        String readString =
        String.copyValueOf(inputBuffer, 0,
        charRead);
        s += readString;
        inputBuffer = new char[READ_BLOCK_SIZE];
    }

  filename.setText(s);
  filecontent.setText(s);
  Toast.makeText(getBaseContext(),
  "File loaded successfully!",
  Toast.LENGTH_SHORT).show();
  }
  });

显示每个文本框中文件的所有内容!!我想要从内容中提取文件名!!

1 个答案:

答案 0 :(得分:0)

除非您需要该文件是人类可读的,否则我建议使用DataInputStream / DataOutputStream将两个String值存储为序列化Java对象:

<强>书写:

public void onClick(View view) {
    String str = filename.getText().toString();
    String str2= filecontent.getText().toString();

    File sdCard = Environment.getExternalStorageDirectory();
    File directory = new File (sdCard, "MyFiles");
    directory.mkdirs();
    File file = new File(directory, "textfile.txt");
    FileOutputStream fOut = new FileOutputStream(file);
    DataOutputStream os = new DataOutputStream(fOut);
    os.writeUTF(str);
    os.writeUTF(str2);
    os.close();
}

<强>读:

public void onClick(View v) {    
    File sdCard = Environment.getExternalStorageDirectory();
    File directory = new File (sdCard, "MyFiles");
    File file = new File(directory, "textfile.txt");

    FileInputStream fIn = new FileInputStream(file);
    DataInputStream is = new DataInputStream(fIn);
    String name = is.readUTF();
    String content = is.readUTF();
    is.close();

    filename.setText(name);
    filecontent.setText(content);
    Toast.makeText(getBaseContext(),
        "File loaded successfully!",
        Toast.LENGTH_SHORT).show();
}

但请注意,建议SDCard的所有I / O都在工作线程中完成。在像这样的事件处理程序中执行它并不是一个好习惯。为每个人点燃AsyncTask要好得多。