From 465351b8be23f2cb294a5adc1ea62e803a002269 Mon Sep 17 00:00:00 2001 From: andysim3d Date: Thu, 4 Aug 2016 14:55:05 -0400 Subject: [PATCH 1/3] translate how-do-i-create-a-java-string-from-the-contents-of-a-file --- ...java-string-from-the-contents-of-a-file.md | 53 +++++++++++++++++++ 1 file changed, 53 insertions(+) create mode 100644 contents/how-do-i-create-a-java-string-from-the-contents-of-a-file.md diff --git a/contents/how-do-i-create-a-java-string-from-the-contents-of-a-file.md b/contents/how-do-i-create-a-java-string-from-the-contents-of-a-file.md new file mode 100644 index 0000000..0345f21 --- /dev/null +++ b/contents/how-do-i-create-a-java-string-from-the-contents-of-a-file.md @@ -0,0 +1,53 @@ +##如何从文件里读取字符串 + +###从文件里读取所有文本: + +代码: +```java +static String readFile(String path, Charset encoding) + throws IOException +{ + byte[] encoded = Files.readAllBytes(Paths.get(path)); + return new String(encoded, encoding); +} + +``` + +###一行一行读入文本: + +Java 7 提供了一个方便的方法可以直接将文件中的文本一行一行读入,存放在一个List容器里。 +```JAVA +List lines = Files.readAllLines(Paths.get(path), encoding); +``` + +###内存使用率 + +第一个方法,一次读取所有文本的方法,占用内存较多,因为它一次性保留了文件的所有原始信息,包括换行符之类的“无用”字符。 + +第二个方法,按行读入,比起一次性全部读入,要消耗更少的内存。因为它每次只将一行的文件信息放在缓存中。然而,如果文本文件很大,这种方法依然会占用很多内存。 + +如果你的程序需要处理很大的文本文件,在设计的时候就要考虑,分配一块固定的缓存,每次从流中读入文件的一部分放入缓存,处理,然后清空缓存,把下一部分读入缓存,直道处理完所有的数据。 + +这里的“很大”是相对于计算机性能的。一般来说,几十个G的文件应当算是大文件。 + +###字符编码 + +还有一件事需要注意,就是字符编码。不同的平台有自己的默认编码,所以有时候你的程序需要指定编码,来保持平台无关/跨平台。 + +```StandardCharsets``` 类定义了常用的编码类型,你可以用如下方法调用: + +```java +String content = readFile("test.txt", StandardCharsets.UTF_8); +``` + +可以通过```Charset```类来获得平台默认的字符编码。 + +```java +String content = readFile("test.txt", Charset.defaultCharset()); +``` + +注: 这个答案与之前Java6版本时的答案完全不同。Java 7 新增的工具类极大的优化了字符处理,文件读取等功能。Java 6 常用的内存映射方法已不适合在Java 7 以后的版本使用。 + + + + From b11f01e43ed840a49daac64aea146969c426a854 Mon Sep 17 00:00:00 2001 From: Andrew Date: Thu, 4 Aug 2016 14:57:00 -0400 Subject: [PATCH 2/3] Update how-do-i-create-a-java-string-from-the-contents-of-a-file.md --- ...how-do-i-create-a-java-string-from-the-contents-of-a-file.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/contents/how-do-i-create-a-java-string-from-the-contents-of-a-file.md b/contents/how-do-i-create-a-java-string-from-the-contents-of-a-file.md index 0345f21..323fdeb 100644 --- a/contents/how-do-i-create-a-java-string-from-the-contents-of-a-file.md +++ b/contents/how-do-i-create-a-java-string-from-the-contents-of-a-file.md @@ -26,7 +26,7 @@ List lines = Files.readAllLines(Paths.get(path), encoding); 第二个方法,按行读入,比起一次性全部读入,要消耗更少的内存。因为它每次只将一行的文件信息放在缓存中。然而,如果文本文件很大,这种方法依然会占用很多内存。 -如果你的程序需要处理很大的文本文件,在设计的时候就要考虑,分配一块固定的缓存,每次从流中读入文件的一部分放入缓存,处理,然后清空缓存,把下一部分读入缓存,直道处理完所有的数据。 +如果你的程序需要处理很大的文本文件,在设计的时候就要考虑,分配一块固定的缓存,每次从流中读入文件的一部分放入缓存,处理,然后清空缓存,把下一部分读入缓存,直到处理完所有的数据。 这里的“很大”是相对于计算机性能的。一般来说,几十个G的文件应当算是大文件。 From 1eeda60ec3fbeaeb2548d60b4969fef376655f82 Mon Sep 17 00:00:00 2001 From: Andrew Date: Thu, 4 Aug 2016 14:58:53 -0400 Subject: [PATCH 3/3] Update how-do-i-create-a-java-string-from-the-contents-of-a-file.md --- ...w-do-i-create-a-java-string-from-the-contents-of-a-file.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/contents/how-do-i-create-a-java-string-from-the-contents-of-a-file.md b/contents/how-do-i-create-a-java-string-from-the-contents-of-a-file.md index 323fdeb..1dc835b 100644 --- a/contents/how-do-i-create-a-java-string-from-the-contents-of-a-file.md +++ b/contents/how-do-i-create-a-java-string-from-the-contents-of-a-file.md @@ -48,6 +48,8 @@ String content = readFile("test.txt", Charset.defaultCharset()); 注: 这个答案与之前Java6版本时的答案完全不同。Java 7 新增的工具类极大的优化了字符处理,文件读取等功能。Java 6 常用的内存映射方法已不适合在Java 7 以后的版本使用。 - +### 原文链接 +http://stackoverflow.com/questions/326390/how-do-i-create-a-java-string-from-the-contents-of-a-file +