文件没有足够的字符?

时间:2013-08-01 13:13:30

标签: java android file

我正在编写这个记事本应用,其中用户在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) {}
        }
    });
}

2 个答案:

答案 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)。