STe*_*TeN 10 file-io android fileinputstream fileoutputstream android-file
我正在将应用程序从Symbian/iPhone移植到Android,其中一部分是将一些数据保存到文件中.我使用FileOutputStream将文件保存到私有文件夹/ data/data/package_name/files中:
FileOutputStream fos = iContext.openFileOutput( IDS_LIST_FILE_NAME, Context.MODE_PRIVATE );
fos.write( data.getBytes() );
fos.close();
Run Code Online (Sandbox Code Playgroud)
现在我正在寻找一种如何加载它们的方法.我正在使用FileInputStream,但它允许我逐字节读取文件,这是非常低效的:
int ch;
StringBuffer fileContent = new StringBuffer("");
FileInputStream fis = iContext.openFileInput( IDS_LIST_FILE_NAME );
while( (ch = fis.read()) != -1)
fileContent.append((char)ch);
String data = new String(fileContent);
Run Code Online (Sandbox Code Playgroud)
所以我的问题是如何使用更好的方式读取文件?
Mat*_*lis 12
使用FileInputStream.read(byte []),您可以更有效地阅读.
通常,您不希望将任意大小的文件读入内存.
大多数解析器都需要InputStream.也许您可以告诉我们您是如何使用该文件的,我们可以建议更合适.
以下是使用字节缓冲区版本的方法read():
byte[] buffer = new byte[1024];
int length;
while ((length = fis.read(buffer)) != -1) {
fileContent.append(new String(buffer));
}
Run Code Online (Sandbox Code Playgroud)
这不是特定于Android的,而是面向Java的.
如果您更喜欢面向行的读取,则可以将FileInputStream包装在InputStreamReader中,然后可以将其传递给BufferedReader.BufferedReader实例有一个readLine()方法,您可以使用它逐行读取.
InputStreamReader in = new InputStreamReader(fis);
BufferedReader br = new BufferedReader(in);
String data = br.readLine()
Run Code Online (Sandbox Code Playgroud)
或者,如果您使用Google Guava库,则可以使用ByteStreams中的便捷功能:
String data = new String(ByteStreams.toByteArray(fis));
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
39363 次 |
| 最近记录: |