我需要在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;
}
修改了源于的方法集-
@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;
}
你可以使用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'
}
或者对于Maven回购,请参见-
有关直接jar下载,请参阅-
最终使用的代码如下:
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