我正在编写这个记事本应用,其中用户在EditText
中输入他们想要的内容,它会write
到文件中,然后他们可以read
在其中TextView
。
以下是我正在使用的EditText的XML
代码:
<EditText
android:id="@+id/txtWrite"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_below="@+id/btnLogOut"
android:layout_marginTop="42dp"
android:layout_toLeftOf="@+id/btnAppendd"
android:ems="5"
android:imeOptions="flagNoExtractUi"
android:inputType="textMultiLine"
android:maxLength="2147483646" />
max length
行是我试图修复它,因为我认为用户input
会有很多。但是,它不起作用。
当我显示文件的length
时,它表示它是1024,这是有道理的,考虑我的input
来自我的文件的数据:
try {
char[] inputBuffer = new char[1024];
FileInputStream fIn = openFileInput("txt");
InputStreamReader isr = new InputStreamReader(fIn);
isr.read(inputBuffer);
String data = new String(inputBuffer);
isr.close(); fIn.close();
display.setText(data + '\n' + '\n' + data.length()); // data + 1024
}catch(Exception e){}
这就是我输入所有文件(Googled)的方式,因此我假设new char[1024]
是文件的max length
只能是1024的原因。
有没有人知道另一种输入无限长度文件的方法?我甚至不知道为什么必须new char[1024]
。
以下是我write
到文件的方式,这很好,因为它是短代码:
FileOutputStream fos = openFileOutput("txt", Context.MODE_PRIVATE);
fos.write(...);
fos.close();
这是我的完整write
方法:
public void write()
{
Button write = (Button)findViewById(R.id.btnWrite);
write.setOnClickListener (new View.OnClickListener()
{
public void onClick(View v)
{
EditText writeText = (EditText)findViewById(R.id.txtWrite);
try {
FileOutputStream fos = openFileOutput("txt", Context.MODE_PRIVATE);
fos.write(writeText.getText().toString().getBytes());
fos.close();
} catch(Exception e) {}
}
});
}
答案 0 :(得分:5)
替换它:
char[] inputBuffer = new char[1024];
FileInputStream fIn = openFileInput("txt");
InputStreamReader isr = new InputStreamReader(fIn);
isr.read(inputBuffer);
String data = new String(inputBuffer);
有了这个:
FileInputStream fIn = openFileInput("txt");
InputStreamReader isr = new InputStreamReader(fIn);
StringBuffer fileContent = new StringBuffer("");
char[] buffer = new char[1024];
int len;
while ((len = isr.read(buffer, 0, 1024)) != -1) {
fileContent.append(new String(buffer, 0, len));
}
String data = fileContent.toString();
//be sure to call isr.close() and fIn.close()
部分借鉴here
答案 1 :(得分:1)
您的代码仅在1024个或更少字符时有效,这意味着它无法正常工作。
背后的想法char[] inputBuffer = new char[1024];
是你通过1024个大小的块读入inputBuffer,你这样做直到读取函数返回-1(达到EOF)。