我正在创建一个Android应用程序,该应用程序记录五个EditText输入并将它们存储在一个文件中。我需要知道的是如何分别检索每个文件并将结果输出到另一个EditText字段。
MyExampleCode:
package chuck.com;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.app.Activity;
import android.content.Intent;
public class FillFile extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_fill_file);
Button submit = (Button) findViewById(R.id.button1);
submit.setOnClickListener(sub);
Button disp = (Button) findViewById(R.id.button2);
disp.setOnClickListener(dis);
}
private OnClickListener sub = new OnClickListener(){
public void onClick(View v){
try {
EditText one = (EditText) findViewById(R.id.editText1);
EditText two = (EditText) findViewById(R.id.editText2);
EditText three = (EditText) findViewById(R.id.editText3);
EditText four = (EditText) findViewById(R.id.editText4);
EditText five = (EditText) findViewById(R.id.editText5);
FileOutputStream fos;
fos = openFileOutput("XML.txt", MODE_APPEND);
String uno = one.getText().toString();
String dos = two.getText().toString();
String tres = three.getText().toString();
String quatro = four.getText().toString();
String cinco = five.getText().toString();
fos.write(uno.getBytes());
fos.write(dos.getBytes());
fos.write(tres.getBytes());
fos.write(quatro.getBytes());
fos.write(cinco.getBytes());
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
};
private OnClickListener dis = new OnClickListener(){
public void onClick(View v){
Intent transf = new Intent(v.getContext(), MainActivity.class);
startActivityForResult(transf, 0);
}
};
}
我要将文件导出到的xml布局:
package chuck.com;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import android.os.Bundle;
import android.app.Activity;
import android.content.Intent;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
File fileDir = getFilesDir();
String fileName = ("XML.txt");
File backup = new File(fileDir, fileName);
boolean content = backup.length() == 0;
try {
backup.createNewFile();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
TextView one = (TextView) findViewById(R.id.textView1);
TextView two = (TextView) findViewById(R.id.textView2);
TextView three = (TextView) findViewById(R.id.textView3);
TextView four = (TextView) findViewById(R.id.textView4);
TextView five = (TextView) findViewById(R.id.textView5);
EditText eOne = (EditText) findViewById(R.id.editText1);
EditText eTwo = (EditText) findViewById(R.id.editText2);
EditText eThree = (EditText) findViewById(R.id.editText3);
EditText eFour = (EditText) findViewById(R.id.editText4);
Button input = (Button) findViewById(R.id.input_button);
input.setOnClickListener(insert);
if (content)
{
one.setVisibility(View.GONE);
two.setVisibility(View.GONE);
three.setVisibility(View.GONE);
four.setVisibility(View.GONE);
eOne.setVisibility(View.GONE);
eTwo.setVisibility(View.GONE);
eThree.setVisibility(View.GONE);
eFour.setVisibility(View.GONE);
}
else
{
five.setVisibility(View.GONE);
FileInputStream fis;
fis = openFileInput("XML.txt");
eOne.setText(uno);
eTwo.setText(dos);
eThree.setText(tres);
eFour.setText(quatro, cinco);
}
}
private OnClickListener insert = new OnClickListener(){
public void onClick(View v) {
Intent trans = new Intent(v.getContext(), FillFile.class);
startActivityForResult(trans, 0);
}
};
}
fos.write("uno=".getBytes());
fos.write(uno.getBytes());
fos.write("\n".getBytes());
fos.write("dos=".getBytes());
fos.write(dos.getBytes());
...
这将产生一个具有
uno=<editText1 text>
dos=<editText2 text>
...
然后,当您读取此文件时。一次读取一行。在“ =”(或您决定使用的分隔符)上分割行。如果定界符左侧的文本等于您要查找的键,那么您知道定界符右侧的文本就是您需要抓取的文本。
就个人而言,如果我要以这种方式编写文件,我将使用它PrintWriter
而不是FileOutputStream
仅使用它,因为这会使代码更简洁。看起来像
PrintWriter pw = new PrintWriter(fos);
pw.println("uno=" + uno);
pw.println("dos=" + dos);
...
编辑(OP请求添加的代码)
这是逐行读取的。它将'='上的每一行分割。然后,它会将分割字符串的第0个位置(这将是'='的左侧)与您的琴键进行比较。如果它等于您想要的键,则拆分字符串的第一位置将是您要获取的实际文本。
BufferedReader br = new BufferedReader(new FileReader("file.txt"));
String line;
whlie( (line = br.readLine()) != null ){
String[] separated = line.split("=");
if( "uno".equals(separated[0]) )
// Key is uno seaparated[1] has <editText1 text> (assuming example above)
if( "dos".equals(separated[0]) )
// Key is dos separated[1] has <editText2 text> (assuming example above)
...
}
注意您可能应该添加更多错误检查-为简单起见,我将其排除在外。
但是,作为一个示例,您可以想象用户输入一些内容到编辑文本中并带有'='的情况(例如,用户输入editText1“ 1 + 1 = 2”)。在这种情况下,separated
将包括3个部分。
0
您的密钥(在示例中为uno)
1
用户输入的第一部分在用户输入'='的左侧(在示例中为'1 + 1')
2
用户输入的第二部分在用户输入'='的右侧(在示例中为'2')。
一个简单的解决方案是简单地遍历其余分离的String,以确保您获得所有信息。
if( "uno".equals(separated[0]) ){
String info = "";
for( int i=1; i<separated.length; i++ ){
info += separated[i];
if( (i+1) < separated.length ){
info += "="; // This replaces the user input '=' that you split out
}
}
// After this loop info has the exact String the user entered even if it contained your delimiter ('=' in this example)
}
另一个注意事项除了使用之外,.split()
您还可以使用StringTokenizer
它们执行相同的操作,但是有些人更喜欢一种。使用最有效且对您有意义的方法。如果您都不熟悉这两个地方,那么这里有一篇不错的文章,介绍了2个Android Split字符串的用法
其他编辑似乎StringTokenizer
不建议在新代码中使用。从Javadoc http://docs.oracle.com/javase/7/docs/api/java/util/StringTokenizer.html
“StringTokenizer
是一个遗留类,出于兼容性原因保留了该类,尽管在新代码中不鼓励使用它。建议寻求该功能的任何人都应改用或的split
方法”String
java.util.regex
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句