当前位置: 首页 > 知识库问答 >
问题:

读取文件为字符串

崔琦
2023-03-14

我需要在android中以字符串的形式加载一个xml文件,以便将其加载到TBXML xml解析器库并对其进行解析。我现在必须以字符串形式读取文件的实现需要大约2秒,即使对于一些KBs的非常小的xml文件也是如此。在Java/Android中,有没有已知的快速方法可以将文件读取为字符串?

这是我现在拥有的代码:

public static String readFileAsString(String filePath) {
    String result = "";
    File file = new File(filePath);
    if ( file.exists() ) {
        //byte[] buffer = new byte[(int) new File(filePath).length()];
        FileInputStream fis = null;
        try {
            //f = new BufferedInputStream(new FileInputStream(filePath));
            //f.read(buffer);

            fis = new FileInputStream(file);
            char current;
            while (fis.available() > 0) {
                current = (char) fis.read();
                result = result + String.valueOf(current);
            }
        } catch (Exception e) {
            Log.d("TourGuide", e.toString());
        } finally {
            if (fis != null)
                try {
                    fis.close();
                } catch (IOException ignored) {
            }
        }
        //result = new String(buffer);
    }
    return result;
}

共有3个答案

赏星河
2023-03-14

修改了源于的方法集-

@JaredRummler对您评论的回答:

读取文件为字符串

这不会在字符串的末尾添加一个额外的新行吗?

为了防止在末尾添加换行符,您可以在第一个循环期间使用布尔值集,正如您在代码示例中所做的那样

public static String convertStreamToString(InputStream is) throws IOException {
   // http://www.java2s.com/Code/Java/File-Input-Output/ConvertInputStreamtoString.htm
    BufferedReader reader = new BufferedReader(new InputStreamReader(is));
    StringBuilder sb = new StringBuilder();
    String line = null;
    Boolean firstLine = true;
    while ((line = reader.readLine()) != null) {
        if(firstLine){
            sb.append(line);
            firstLine = false;
        } else {
            sb.append("\n").append(line);
        }
    }
    reader.close();
    return sb.toString();
}

public static String getStringFromFile (String filePath) throws IOException {
    File fl = new File(filePath);
    FileInputStream fin = new FileInputStream(fl);
    String ret = convertStreamToString(fin);
    //Make sure you close all streams.
    fin.close();
    return ret;
}
赵嘉赐
2023-03-14

你可以使用org。阿帕奇。平民io。IOUtils。toString(InputStream是,字符集chs)来实现这一点。

例如

IOUtils.toString(context.getResources().openRawResource(<your_resource_id>), StandardCharsets.UTF_8)

添加正确的库:

将以下内容添加到您的应用/build.gradle文件:

dependencies {
    compile 'org.apache.directory.studio:org.apache.commons.io:2.4'
}
  • https://stackoverflow.com/a/33820307/1815624

或者对于Maven回购,请参见-

有关直接jar下载,请参阅-

邓令雪
2023-03-14

最终使用的代码如下:

http://www.java2s.com/Code/Java/File-Input-Output/ConvertInputStreamtoString.htm

public static String convertStreamToString(InputStream is) throws Exception {
    BufferedReader reader = new BufferedReader(new InputStreamReader(is));
    StringBuilder sb = new StringBuilder();
    String line = null;
    while ((line = reader.readLine()) != null) {
      sb.append(line).append("\n");
    }
    reader.close();
    return sb.toString();
}

public static String getStringFromFile (String filePath) throws Exception {
    File fl = new File(filePath);
    FileInputStream fin = new FileInputStream(fl);
    String ret = convertStreamToString(fin);
    //Make sure you close all streams.
    fin.close();        
    return ret;
}
 类似资料:
  • 问题内容: 如何在不使用?的情况下逐行读取文本文件的内容? 例如,我有一个文本文件,里面看起来像这样: 我想创建两个,然后使用类似这样的东西 这样,它分配的价值,以及价值。 问题答案: 您应该使用。 然后,您可以从下一个索引中访问列表的一个特定元素: 这将给您第一行(即:Purlplemonkeys)

  • 问题内容: 嗨,我想读取N行的txt文件,并将结果放入字符串数组中。 问题答案: 使用和。

  • 问题内容: 我需要在文本文件中读写数据,但是还无法弄清楚该怎么做。 我在Swift的iBook中找到了此示例代码,但我仍然不知道如何写入或读取数据。 问题答案: 为了进行读写,您应该使用可写的位置,例如documents目录。以下代码显示了如何读写简单的字符串。您可以在操场上进行测试。 雨燕3.x-5.x 斯威夫特2.2 斯威夫特1.x

  • 问题内容: 我可以将文件读取为字节数组 但是当我将其转换为字符串时 它将utf16字节视为ASCII 如何正确转换? 输出: 假 [255 254 91 0 83 0 99 0 114 0 105 0 112 0 116 0 32 0 73 0 110 0 102 0 111 0 93 0 13 0] Script I nfo] 更新: 在测试了两个示例之后,我已经了解了确切的问题。 在Windo

  • 如何读取文件并从json转换为字符串?示例:我的文件编号为。json[“23423423”,“234234234”,“53453453”] 我想要的是:String numbers=“'23423423','234234234','53453453'”;

  • 当我将XML文件中的特定字符读取到PHP文件时,我遇到了一个问题。 我使用像“ä”、“ü”和“ö”这样的字符。我得到以下错误: simplexml_load_string()[function.simplexml-load-String]:实体:第96行:解析器错误:输入不正确的UTF-8,指示编码!字节:0xFC 0x73 0x65 0x0C