实际上,每个代码示例都逐行读取TXT文件,并将其存储在String数组中我不想逐行处理,因为我认为这对我的需求来说是不必要的资源浪费:我只想快速有效地将.txt内容转储到一个String中。下面的方法可以完成任务,但有一个缺点:
private static String readFileAsString(String filePath) throws java.io.IOException{
byte[] buffer = new byte[(int) new File(filePath).length()];
BufferedInputStream f = null;
try {
f = new BufferedInputStream(new FileInputStream(filePath));
f.read(buffer);
if (f != null) try { f.close(); } catch (IOException ignored) { }
} catch (IOException ignored) { System.out.println("File not found or invalid path.");}
return new String(buffer);
}
缺点是换行符被转换为长空格,例如"。
我希望换行符从\n或\r转换为<br>(HTML标记)。
提前谢谢。
使用扫描仪并自己添加换行符怎么样:
sc = new java.util.Scanner ("sample.txt")
while (sc.hasNext ()) {
buf.append (sc.nextLine ());
buf.append ("<br />");
}
我看不出你的长空位是从哪里来的。
您可以直接读取缓冲区,然后从缓冲区创建一个字符串:
File f = new File(filePath);
FileInputStream fin = new FileInputStream(f);
byte[] buffer = new byte[(int) f.length()];
new DataInputStream(fin).readFully(buffer);
fin.close();
String s = new String(buffer, "UTF-8");
您可以添加以下代码:
return new String(buffer).replaceAll("(rn|r|n|nr)", "<br>");
这就是你要找的吗?
代码将读取文件中出现的文件内容,包括换行符。如果你想把break改成其他的东西,比如在html中显示等等,你要么需要后期处理,要么通过逐行读取文件来完成。由于您不想要后者,您可以通过以下方式替换您的退货:应该进行转换-
return (new String(buffer)).replaceAll("r[n]?", "<br>");
StringBuilder sb = new StringBuilder();
try {
InputStream is = getAssets().open("myfile.txt");
byte[] bytes = new byte[1024];
int numRead = 0;
try {
while((numRead = is.read(bytes)) != -1)
sb.append(new String(bytes, 0, numRead));
}
catch(IOException e) {
}
is.close();
}
catch(IOException e) {
}
生成的String
:String result = sb.toString();
然后在这个result
中替换您想要的任何内容。
我同意@Sanket Patel的一般方法,但使用Commons I/O,您可能需要File Utils。
所以你的码字看起来像:
String myString = FileUtils.readFileToString(new File(filePath));
还有另一个版本可以指定备用字符编码。
您应该尝试org.apache.commons.io.IOUtils.toString(InputStream是)以String形式获取文件内容。在那里,您可以传递InputStream对象,您将从获得该对象
getAssets().open("xml2json.txt") *<<- belongs to Android, which returns InputStream*
在您的活动中。要获得字符串,请使用此:
String xml = IOUtils.toString((getAssets().open("xml2json.txt")));
所以,
String xml = IOUtils.toString(*pass_your_InputStream_object_here*);