java scanner 读取文件_Java读取文本文件
有很多方法可以在java中读取文本文件。下面我们来逐个看看java中读取文本文件的几个方法。
在java中有很多读取文本文件的方法。文本文件由字符组成,因此可以使用Reader类。在java中读取文本文件也有一些实用程序类。
使用Files类读取文本文件;
使用FileReader类读取文本文件;
使用BufferedReader类读取文本文件;
使用Scanner类读取文本文件;
现在让我们看看如何使用这些类在java中读取文本文件。
方法一:使用java.nio.file.Files读取文本文件
使用Files类将文件的所有内容读入字节数组。Files类还有一个方法可以读取所有行到字符串列表。Files类是在Java 7中引入的,如果想加载所有文件内容,使用这个类是比较适合的。只有在处理小文件并且需要加载所有文件内容到内存中时才应使用此方法。
String fileName = "D:/maxsu/docs/source.txt";
Path path = Paths.get(fileName);
byte[] bytes = Files.readAllBytes(path);
List allLines = Files.readAllLines(path, StandardCharsets.UTF_8);
方法二:使用java.io.FileReader类
可以使用FileReader获取BufferedReader,然后逐行读取文件。FileReader不支持编码并使用系统默认编码,因此它不是一种java中读取文本文件的非常有效的方法。
String fileName = "D:/maxsu/docs/source.txt";
File file = new File(fileName);
FileReader fr = new FileReader(file);
BufferedReader br = new BufferedReader(fr);
String line;
while((line = br.readLine()) != null){
// 一行一行地处理...
System.out.println(line);
}
方法三:使用java.io.BufferedReader
如果想逐行读取文件并对它们进行处理,那么BufferedReader是非常合适的。它适用于处理大文件,也支持编码。
BufferedReader是同步的,因此可以安全地从多个线程完成对BufferedReader的读取操作。BufferedReader的默认缓冲区大小为:8KB。
String fileName = "D:/maxsu/docs/source.txt";
File file = new File(fileName);
FileInputStream fis = new FileInputStream(file);
InputStreamReader isr = new InputStreamReader(fis, cs);
BufferedReader br = new BufferedReader(isr);
String line;
while((line = br.readLine()) != null){
//process the line
System.out.println(line);
}
br.close();
方法四:使用Scanner读取文本文件
如果要逐行读取文件或基于某些java正则表达式读取文件,则可使用Scanner类。
Scanner类使用分隔符模式将其输入分解为标记,分隔符模式默认匹配空格。然后可以使用各种下一种方法将得到的标记转换成不同类型的值。Scanner类不同步,因此不是线程安全的。
Path path = Paths.get(fileName);
Scanner scanner = new Scanner(path);
System.out.println("Read text file using Scanner");
// 一行一行地读取
while(scanner.hasNextLine()){
//process each line
String line = scanner.nextLine();
System.out.println(line);
}
scanner.close();
Java读取文件示例
以下是显示如何在java中读取文本文件的示例。分别使用:Scanner,Files,BufferedReader编码和FileReader实现。
package com.journaldev.files;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.nio.charset.Charset;
import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.List;
import java.util.Scanner;
public class JavaReadFile {
public static void main(String[] args) throws IOException {
String fileName = "D:/maxsu/docs/source.txt";
//使用Java 7中的Files类处理小文件,获取完整的文件数据
readUsingFiles(fileName);
//使用Scanner类来处理大文件,逐行读取
readUsingScanner(fileName);
//使用BufferedReader读取,逐行读取
readUsingBufferedReader(fileName);
readUsingBufferedReaderJava7(fileName, StandardCharsets.UTF_8);
readUsingBufferedReader(fileName, StandardCharsets.UTF_8);
//使用FileReader读取,没有编码支持,效率不高
readUsingFileReader(fileName);
}
private static void readUsingFileReader(String fileName) throws IOException {
File file = new File(fileName);
FileReader fr = new FileReader(file);
BufferedReader br = new BufferedReader(fr);
String line;
System.out.println("Reading text file using FileReader");
while((line = br.readLine()) != null){
//逐行读取
System.out.println(line);
}
br.close();
fr.close();
}
private static void readUsingBufferedReader(String fileName, Charset cs) throws IOException {
File file = new File(fileName);
FileInputStream fis = new FileInputStream(file);
InputStreamReader isr = new InputStreamReader(fis, cs);
BufferedReader br = new BufferedReader(isr);
String line;
System.out.println("Read text file using InputStreamReader");
while((line = br.readLine()) != null){
//逐行读取
System.out.println(line);
}
br.close();
}
private static void readUsingBufferedReaderJava7(String fileName, Charset cs) throws IOException {
Path path = Paths.get(fileName);
BufferedReader br = Files.newBufferedReader(path, cs);
String line;
System.out.println("Read text file using BufferedReader Java 7 improvement");
while((line = br.readLine()) != null){
//逐行读取
System.out.println(line);
}
br.close();
}
private static void readUsingBufferedReader(String fileName) throws IOException {
File file = new File(fileName);
FileReader fr = new FileReader(file);
BufferedReader br = new BufferedReader(fr);
String line;
System.out.println("Read text file using BufferedReader");
while((line = br.readLine()) != null){
//逐行读取
System.out.println(line);
}
//close resources
br.close();
fr.close();
}
private static void readUsingScanner(String fileName) throws IOException {
Path path = Paths.get(fileName);
Scanner scanner = new Scanner(path);
System.out.println("Read text file using Scanner");
//逐行读取
while(scanner.hasNextLine()){
//逐行处理
String line = scanner.nextLine();
System.out.println(line);
}
scanner.close();
}
private static void readUsingFiles(String fileName) throws IOException {
Path path = Paths.get(fileName);
//将文件读取到字节数组
byte[] bytes = Files.readAllBytes(path);
System.out.println("Read text file using Files class");
//read file to String list
@SuppressWarnings("unused")
List allLines = Files.readAllLines(path, StandardCharsets.UTF_8);
System.out.println(new String(bytes));
}
}
选择使用哪个方法来读取文件取决于项目要求。例如,如果只是日志记录文件,则可以使用Files和BufferedReader。如果要查找基于分隔符的文件,则应使用Scanner类。
在结束本教程之前,顺便提及一下RandomAccessFile。也可以用它来读取文本文件。如下示例代码 -
RandomAccessFile file = new RandomAccessFile("D:/maxsu/docs/readme.txt", "r");
String str;
while ((str = file.readLine()) != null) {
System.out.println(str);
}
file.close();
¥ 我要打赏
纠错/补充
收藏
加QQ群啦,易百教程官方技术学习群
注意:建议每个人选自己的技术方向加群,同一个QQ最多限加 3 个群。
java scanner 读取文件_Java读取文本文件相关推荐
- java 无法读取文件_java 读取文件,无法显示文件内容,如何解决? 谢谢。
从来没见过进行文件读取写入时,在写入中需要随机数的,你读取文件就是从一个地方获取输入流,然后将这个输入流写到别的地方,根本不要随机数. 给你一个示例://copy a file to another ...
- java 命令行 读取文件_java读取txt文件
自己记录一下用法的,防止忘了 package dataStructure; import java.util.Scanner; import java.io.FileReader; import ja ...
- java读写orc文件_java读取hive的orc文件
hive API2 hive udf 读取HDFS的orc文件 package hive_udf_province; import org.apache.hadoop.conf.Configurati ...
- java解析yml文件_java读取解析application.yml
java读取解析application.yml 不用依赖spring容器,可单独使用. bug已修改... 第一步.首先要2个jar com.fasterxml.jackson.dataformat ...
- java访问本地文件_java 读取本地文件 更改
/*** @Title: MakeHtml * @Description: 创建html *@paramfilePath 设定模板文件 *@paramconent 替换的内容 *@paramdisrP ...
- java 修改ini文件_java读取和修改ini配置文件 | 学步园
/* * ConfigurationFile.java * * Created on 2009年4月15日, 下午1:36 * * To change this template, choose To ...
- java 修改ini文件_Java读取和修改ini配置文件
/** * 修改ini配置文档中变量的值 * @param file 配置文档的路径 * @param section 要修改的变量所在段名称 * @param variable 要修改的变量名称 * ...
- java打开db文件_java 读取DB.properties文件方式 | 学步园
读properties文件的时候,出现了或多或少的奇怪问题,这里把最终成功的方式描述一下. PropUtil工具类 public class PropUtil { private String fil ...
- java 合并txt文件_java合并文本文件并删除文件中重复行
合并两个文本文件,并删除合并后重复的行 import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.Fil ...
最新文章
- 解释型语言与编译型语言的区别
- 首届中国IT架构大师高峰论坛(十年架构之路汇成一句话!)
- 深度学习者的入门福利-Keras深度学习笔记
- Hadoop2.7.6在Windows7单机部署
- 回归素材(part6)--机器学习系统设计
- js 技巧杂引(转)
- 室内定位 - 资料收集
- 47.QT-QChart之曲线图,饼状图,条形图使用
- 9206-初识html
- 总结我在架构师升级过程中的那些坑以及各种体会
- vue 表单 input radio
- python项目软件代码_七套Python库快速提升您项目的代码可维护性,软件工程,代码库...
- c++ STL模板(一)
- Maven 设置阿里镜像
- Codevs3332 数列
- 人工智能AI系列 - 元宇宙 - 2D虚拟人
- 苹果测试版最新发行说明,iOS 15.4支持戴口罩解锁,Dropbox和OneDrive的云存储功能被打破
- 调用Python的PyAutoGUI模块中的doubleClick函数无反应
- verilog代码中避免出现latch方法
- 数学之美--计算机图形学中的数学方法论
热门文章
- 一文搞懂 Web Worker(原理到实践)
- CWE 4.7中的新视图:工业控制系统的安全漏洞类别
- 画流动虚线框(java)
- 不会吧不会吧,不会有人连线程池都没听说过吧
- 标准logo大小尺寸设置标准是什么? logo大小参数详解。
- 利用爬虫获取app数据
- java获取汉字拼音_Java获取汉字对应的拼音(全拼或首字母)
- sql2java-excel(二):基于apache poi实现数据库表的导出的spring web支持
- linux 中的rime 输入法 自定义 新世纪五笔输入法
- K8s学习(二)——核心组件