将整个文本文件转换为Java中的string
Java是否有单行指令读取到文本文件,如C#所具有的?
我的意思是,在Java中有这样的东西吗?
String data = System.IO.File.ReadAllText("path to file");
如果不是的话……这样做的最佳方式是什么?
编辑:
我更喜欢Java标准库中的一种方式…我不能使用第三方库..
AFAIK,没有标准图书馆的单行。 标准库的典型方法是这样的:
public static String readStream(InputStream is) { StringBuilder sb = new StringBuilder(512); try { Reader r = new InputStreamReader(is, "UTF-8"); int c = 0; while ((c = r.read()) != -1) { sb.append((char) c); } } catch (IOException e) { throw new RuntimeException(e); } return sb.toString(); }
笔记:
- 为了从文件中读取文本 ,使用FileInputStream
- 如果性能很重要,而且您正在读取大型文件,则最好将stream包装在BufferedInputStream中
- 该stream应该被主叫方closures
apache commons-io有:
String str = FileUtils.readFileToString(file, "utf-8");
但是在标准的java类中没有这样的实用工具。 如果你(由于某种原因)不需要外部库,你必须重新实现它。 这里有一些例子,或者,你可以看看它是如何通过commons-io或Guava实现的。
不在主要的Java库中,但可以使用Guava :
String data = Files.toString( new File("path.txt"), Charsets.UTF_8 );
或读线:
List<String> lines = Files.readLines( new File("path.txt"), Charsets.UTF_8 );
当然,我敢肯定,还有其他的第三方库,这将使得它很容易 – 我只是最熟悉番石榴。
Java 7通过Files
类改进了这种令人遗憾的事务状态(不要与Guava的同名类混淆),您可以从文件中获取所有行,而无需使用外部库:
List<String> fileLines = Files.readAllLines(path, StandardCharsets.UTF_8);
或成一个string:
String contents = new String(Files.readAllBytes(path), StandardCharsets.UTF_8); // or equivalently: StandardCharsets.UTF_8.decode(ByteBuffer.wrap(Files.readAllBytes(path)));
如果你需要一个干净的JDK的开箱即用,这很好。 这就是说,你为什么没有番石榴写Java?
在Java 8中 (没有外部库),你可以使用stream。 这段代码读取一个文件,并把所有以','分隔的行放入一个String中。
try (Stream<String> lines = Files.lines(myPath)) { list = lines.collect(Collectors.joining(", ")); } catch (IOException e) { LOGGER.error("Failed to load file.", e); }
Path path = FileSystems.getDefault().getPath(directory, filename); String fileContent = new String(Files.readAllBytes(path), StandardCharsets.UTF_8);
String fileContent=""; try { File f = new File("path2file"); FileInputStream inp = new FileInputStream(f); byte[] bf = new byte[(int)f.length()]; inp.read(bf); fileContent = new String(bf, "UTF-8"); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); }