Java8中應用一行代碼讀取文件。本站提示廣大學習愛好者:(Java8中應用一行代碼讀取文件)文章只能為提供參考,不一定能成為您想要的結果。以下是Java8中應用一行代碼讀取文件正文
JDK7中引入了新的文件操作類java.nio.file.File,它包括了許多有效的辦法來操作文件,好比檢討文件能否為隱蔽文件,或許是檢討文件能否為只讀文件。開辟者還可使用Files.readAllBytes(Path)辦法把全部文件讀入內存,此辦法前往一個字節數組,還可以把成果傳遞給String的結構器,以便創立字符串輸入。此辦法確保了當讀入文件的一切字節內容時,文件屬性是封閉的,不然就會湧現IO異常或其它的未檢討異常。這意味著在讀文件到最初的塊內容後,無需封閉文件。
要留意,此辦法不合適讀取很年夜的文件,由於能夠存在內存空間缺乏的成績。開辟者還應當明白劃定文件的字符編碼,以免任異常或解析毛病。
假如你想讀入文件作為字符串,那末你還可使用readAllLines(Path path, Charset cs)辦法,此辦法與之前的辦法類似,也是在讀完文件後無需封閉文件。然則它前往的不是字節數組,而是字符串數組。並且,Java8重寫了此辦法,無需指定字符集,直接應用UTF-8編碼停止字符串轉換。
假如你想一行一行的讀入文件作為字符串,那末你可使用Files.lines()辦法,它會從讀入的文件中前往字符串流,並應用UTF-8編碼把字節轉換成字符。應用forEach()辦法,可以只用一行Java代碼完成把文件的一切內容輸入到掌握台,以下面第三個代碼片斷。
import java.io.IOException;
import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.List;
public class FileReadingTest {
public static void main(String[] args) throws IOException {
// Java 7 例子
// Files.readAllBytes默許以UTF-8編碼讀入文件,故文件的編碼假如不是UTF-8,那末中文內容會湧現亂字符
System.out.println(new String(Files.readAllBytes(Paths.get("D:\\jd.txt"))));
// Java 8例子
List<String> lines = Files.readAllLines(Paths.get("D:\\jd.txt"), StandardCharsets.UTF_8);
StringBuilder sb = new StringBuilder();
for(String line : lines){
sb.append(line);
}
String fromFile = sb.toString();
System.out.println(fromFile);
}
}
假如應用的不是JDK7,而是JDK8,那末一行代碼便可完成讀文件。
import static java.lang.System.out;
import static java.nio.file.Files.readAllBytes;
import static java.nio.file.Paths.get;
import java.io.IOException;
public class FileIntoString {
public static void main(String[] args) throws IOException {
// 一行代碼弄定讀文件,默許是UTF-8編碼
out.println(new String(readAllBytes(get("d:/jd.txt"))));
}
}
假如應用JDK8,那末還可使用流API來讀寫文件,如許代碼更簡練、高效。
上面的例子中,lines()辦法前往字符串流,字符串應用的是UTF-8編碼。以下:
import java.io.IOException;
import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
import java.nio.file.Paths;
public class Java8FileReader {
public static void main(String[] args) throws IOException {
// Java8用流的方法讀文件,加倍高效
Files.lines(Paths.get("D:\\jd.txt"), StandardCharsets.UTF_8).forEach(System.out::println);
}
}
下面的例子要留意幾點:
1)文件能夠很年夜,能夠會超越內存空間,應用前要做評價。
2)要輸入日記,記載為何沒法讀取文件或許在浏覽文件時碰到的任何毛病。
3)在把字節轉換成字符時,應當指定字符編碼。
4)要處置文件不存在的情形。
還要留意,假如讀入的文件的編碼是ANSI編碼,那末下面的例子在讀取文件內容時會報java.nio.charset.MalformedInputException: Input length = 1毛病。