本文主要介绍了Java 语言(一种计算机语言,尤用于创建网站)语言(一种计算机语言,尤用于创建网站)从文件中读取数据的方法,详细的介绍了六种方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
目录
1.扫描仪
2.Files.lines (Java 8)
3.Files.readAllLines(java8)
4.Files.readString(JDK 11)
5.Files.readAllBytes()
6.经典管道流的方式
本文主要介绍了Java 语言(一种计算机语言,尤用于创建网站)语言(一种计算机语言,尤用于创建网站)从文件中读取数据的六种方法,分享给大家,具体如下:
扫描仪(Java 1.5)按行读数据及String、Int类型等按分隔符读数据。
文件。行,返回流(Java 8)流式数据处理,按行读取
Files.readAllLines,返回列表(Java 8)
Files.readString,读取字符串(Java 11),文件最大2G .
Files.readAllBytes,读取byte[](Java 7),文件最大2G .
BufferedReader,经典方式(Java 1.1 -永远)
1.扫描仪
第一种方式是扫描仪,从JDK1.5开始提供的API,特点是可以按行读取、按分割符去读取文件数据,既可以读取线类型,也可以读取(同国际组织)国际组织类型、长类型等基础数据类型的数据。
@测试
void testReadFile1()引发IOException {
//文件内容:Hello World|Hello Zimug
字符串fileName=' D:\ \ data \ \ test \ \ new file 4。txt ';
try(Scanner sc=new Scanner(new FileReader(fileName))){
while (sc.hasNextLine()) { //按行读取字符串
string line=sc。next line();
系统。出去。println(line);
}
}
try(Scanner sc=new Scanner(new FileReader(fileName))){
即usedelimiter(' \ \ | ');//分隔符
while (sc.hasNext()) { //按分隔符读取字符串
字符串str=sc。next();
系统。出去。println(str);
}
}
//sc.hasNextInt()、hasNextFloat()、基础数据类型等等等等。
//文件内容:1|2
fileName=' D:\ \ data \ \ test \ \ new file 5。txt ';
try(Scanner sc=new Scanner(new FileReader(fileName))){
即usedelimiter(' \ \ | ');//分隔符
while (sc.hasNextInt()) { //按分隔符读取(同国际组织)国际组织
int int value=sc。nextint();
系统。出去。println(int value);
}
}
}
输出为:
你好世界|你好齐穆格
你好世界
你好,Zimug
2.Files.lines (Java 8)
如果你是需要按行去处理数据文件的内容,这种方式是我推荐大家去使用的一种方式,代码简洁,使用java 8的溪流流将文件读取与文件处理有机融合。
@测试
void testReadFile2()抛出IOException {
string fileName=' D:\ \ data \ \ test \ \ new file。txt ';
//读取文件内容到溪流流中,按行读取
流字符串行=文件。线条(路径。get(文件名));
//随机行顺序进行数据处理
lines.forEach(ele - {
系统。出去。println(ele);
});
}
为每一个获取溪流流中的行数据不能保证顺序,但速度快。如果你想按顺序去处理文件中的行数据,可以使用预先安排好的,但处理效率会下降。
//按文件行顺序进行处理
台词。foreach ordered(系统。out:println);
也可以把溪流转换成列表,但是要注意这意味着你要将所有的数据一次性加载到内存,要注意java.lang.OutOfMemoryError
//转换成列表字符串,要注Java。郎。内存不足错误:Java堆空间
ListString collect=lines。收藏(收藏者。要列出()
3.Files.readAllLines(java8)
@测试
void testReadFile3()抛出IOException {
字符串fileName=' D:\ \ data \ \ test \ \ new file 3。txt ';
//转换成列表字符串,要注意Java。郎。内存不足错误:Java堆空间
ListString lines=文件。读取所有行(路径。获取(文件名),
标准字符集UTF _ 8);
台词。foreach(系统。out:println);
}
4.Files.readString(JDK 11)
从java11开始,为我们提供了一次性读取一个文件的方法。文件不能超过2G,同时要注意你的服务器及虚拟机(Java虚拟机的缩写)内存。这种方法适合快速读取小文本文件。
@测试
void testReadFile4()抛出IOException {
字符串fileName=' D:\ \ data \ \ test \ \ new file 3。txt ';
Java 11提供的方法,不能读取2G以上的文件,和你的内存密切相关。
//String s=files . readstring(paths . get(fileName));
}
5.Files.readAllBytes()
如果你没有JDK11(readAllBytes()以JDK7开头),还想一次性快速读取一个文件的内容并转换成字符串,该怎么做?首先,将数据作为二进制数组读取,然后将其转换为字符串内容。这种方法适合在没有JDK11的情况下快速读取小文本文件。
@测试
void testReadFile5()抛出IOException {
string fileName=' D:\ \ data \ \ test \ \ new file 3 . txt ';
//如果JDK11用了上面的方法,如果没有就好办了。
byte[]bytes=files . read all bytes(paths . get(fileName));
字符串内容=新字符串(字节,标准字符集。UTF _ 8);
System.out.println(内容);
}
6.经典管道流的方式
@测试
void testReadFile6()抛出IOException {
string fileName=' D:\ \ data \ \ test \ \ new file 3 . txt ';
//缓冲流读取,默认缓冲区8k
try(buffered reader br=new buffered reader(new FileReader(fileName))){
弦线;
while ((line=br.readLine())!=null) {
system . out . println(line);
}
}
//用//java 8这样写是可以的
try(buffered reader br=files . newbuffered reader(paths . get(fileName))){
弦线;
while ((line=br.readLine())!=null) {
system . out . println(line);
}
}
}
这种方法可以通过嵌套管道流来组合使用,非常灵活。比如我们想从一个文件中读取java对象,可以使用下面的代码,前提是文件中的数据是ObjectOutputStream写的,然后我们就可以用ObjectInputStream读取了。
try(file inputstream fis=new file inputstream(文件名);
ObjectInputStream ois=新的ObjectInputStream(fis)){
ois . read object();
}
关于java从文件中读取数据的六种方法的这篇文章到此结束。关于java从文件中读取数据的六种方法的更多信息,请搜索我们之前的文章或者继续浏览下面的相关文章。希望大家以后能多多支持我们!
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。