-1

我正在编写这个记事本应用程序,用户在其中输入他们想要的内容EditText,然后将write其写入文件,然后他们可以readTextView.

这是我XML正在使用的 EditText 的代码:

<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){}

这就是我输入所有文件的方式(谷歌搜索),所以我认为这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) {}
        }
    });
}
4

2 回答 2

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()

部分从这里借来的

于 2013-08-01T13:25:13.410 回答
1

您的代码仅在有 1024 个或更少字符时才有效,这意味着它不能正常工作。背后的想法

char[] inputBuffer = new char[1024];

是您按 1024 大小的块读入 inputBuffer,您这样做直到读取函数返回 -1(达到 EOF)。

于 2013-08-01T13:26:13.413 回答