首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将文件读/写到内部私有存储

将文件读/写到内部私有存储
EN

Stack Overflow用户
提问于 2011-03-06 10:03:51
回答 4查看 40.4K关注 0票数 10

我正在将应用程序从Symbian/iPhone移植到Android,其中一部分是将一些数据保存到文件中。我使用FileOutputStream将文件保存到私有文件夹/data/data/package_name/files中。

代码语言:javascript
复制
FileOutputStream fos = iContext.openFileOutput( IDS_LIST_FILE_NAME, Context.MODE_PRIVATE ); 
fos.write( data.getBytes() ); 
fos.close();

现在我正在寻找一种如何加载它们的方法。我使用的是FileInputStream,,但是它允许我逐字节读取文件,这是非常低效率的:

代码语言:javascript
复制
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);

所以我的问题是如何用更好的方式读取文件?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2011-03-06 10:06:20

使用[FileInputStream.read(byte[])](http://developer.android.com/reference/java/io/FileInputStream.html#read(byte[]%29),您可以更有效地阅读。

通常,您不希望将任意大小的文件读入内存中。

大多数解析器将使用InputStream。也许您可以让我们知道您是如何使用该文件,我们可以建议一个更合适的。

下面是如何使用字节缓冲版本的read()

代码语言:javascript
复制
byte[] buffer = new byte[1024];
int length;
while ((length = fis.read(buffer)) != -1) {
    fileContent.append(new String(buffer));
}
票数 12
EN

Stack Overflow用户

发布于 2011-03-06 10:12:14

这并不是真正针对Android的,而是更面向Java的。

如果您更喜欢面向行的阅读,则可以将FileInputStream封装在InputStreamReader中,然后将其传递给BufferedReader。BufferedReader实例有一个可以逐行读取的readLine()方法。

代码语言:javascript
复制
InputStreamReader in = new InputStreamReader(fis);
BufferedReader br = new BufferedReader(in);
String data = br.readLine()

或者,如果使用谷歌番石榴图书馆,则可以在ByteStreams中使用方便函数。

代码语言:javascript
复制
String data = new String(ByteStreams.toByteArray(fis));
票数 8
EN

Stack Overflow用户

发布于 2014-09-23 04:57:45

//写

代码语言:javascript
复制
String data = "Hello World";
OutputStreamWriter outputStreamWriter = new OutputStreamWriter(openFileOutput(FILENAME,     
Context.MODE_PRIVATE));
outputStreamWriter.write(data);
outputStreamWriter.close();

//改为

代码语言:javascript
复制
String ret = "";

    try {
        InputStream inputStream = openFileInput(FILENAME);

        if ( inputStream != null ) {
            InputStreamReader inputStreamReader = new InputStreamReader(inputStream);
            BufferedReader bufferedReader = new BufferedReader(inputStreamReader);
            String receiveString = "";
            StringBuilder stringBuilder = new StringBuilder();

            while ( (receiveString = bufferedReader.readLine()) != null ) {
                stringBuilder.append(receiveString);
            }

            inputStream.close();
            ret = stringBuilder.toString();
        }
    }
    catch (FileNotFoundException e) {
        Log.e(TAG, "File not found: " + e.toString());
    } catch (IOException e) {
        Log.e(TAG, "Can not read file: " + e.toString());
    }

    return ret;
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5209842

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档