文件类
Java 读文件流的知识不可少,先复习一下吧!
文件类是Java IO的一个对象,用于指定文件的相关信息,位置和名称信息。如txt文件,csv文件对Java来说就是一个文件类。
开发手册中指出,文件类对象的第一个参数是一个pathname
路径名,在windows下就是例如:
D:\Java\apache-tomcat-8.5.84
另外还指出\
在Java中为转义字符需要使用\\
那么路径名就变成了C:\\Users\\fireapproval\\Desktop\\数据集\\test.csv
。
File类也提供了若干方法获取路径信息:
方法 | 描述 |
---|---|
getName() | 获取dictionnary |
getPath() | 获取完整路径名 |
这个File只用于存储路径信息,并无实际操作。
文件类IO
在Java中一个文件可以被两种方法读取,字节流或字符流。这里介绍字符流。
在字符流字符输入和输出流分别对应Reader
和Writer
,一个是读文件一个是写文件。对文件操作的实现类是FileReader
,用该对象即可实现文件的读取。FileWriter
是文件写入实现类。
文件流读取
FileReader的继承关系如下:
FileReader构造方法可以用于指定编码,创造FileReader对象。
FileReader fileReader = new FileReader("C:\\Users\\fireapproval\\Desktop\\数据集\\test1.csv");
如图所示,FilReader对象提供的方法是没办法获取文件内容的。需要通过字符流获取。
字符流转换
Java提供了BufferdReader
类来操作文件流,如下:
BufferdReader的构造方法的第一个参数是Reader
字符流,那么它就可以操作任何继承了该接口的实现类。
BufferdReader
读取文件流:
该字符流中提供了readLine()
方法读取文件一行内容。
@Test
public void method5(){
try {
FileReader fileReader = new FileReader("C:\\Users\\fireapproval\\Desktop\\数据集\\test.csv");
System.out.println(fileReader);
BufferedReader reader = new BufferedReader(fileReader);
System.out.println(reader.readLine());
}catch (IOException e){
e.printStackTrace();
}
}
如图所示已经成功读取。该对象只能一行一行读取。
需要注意的该对象读取文件会自动记录行数,从前往后依次读取。
例如使用reader对象读取,会自动换行:
BufferedReader reader = new BufferedReader(fileReader);
System.out.println(reader.readLine());
System.out.println(reader.readLine());
System.out.println(reader.readLine());
文件流写入
FileWriter fileWriter = new FileWriter(new File("D://profile//test.csv"));
如何可以看到FileWriter的对象提供了诸如append()
,write()
,close()
方法,向文件中写入内容。
@Test
public void method5(){
try {
FileWriter fileWriter = new FileWriter(new File("C:\\Users\\fireapproval\\Desktop\\数据集\\test.txt"));
fileWriter.write("Hello World");
}catch (IOException e){
e.printStackTrace();
}
}
csv文件解析
对csv文件解析首先要了解csv文件的结构,还不清楚结构请移步Java操作redis数据库之读取csv文件开头有文件结构。
读取csv文件指定列
public class ReadCSV {
BufferedReader br=null;
String line = null;
public ReadCSV(){}
//获取某一列返回数组
public List<String> getOneColumn(String path,int column){ //参数为路径和指定列
//该列表用于存储读取的指定列元素
ArrayList arrayList = new ArrayList();
try {
br = new BufferedReader(new FileReader(path));
/* 不需要标头执行此行
line = br.readLine();
*/
//循环读取每行的指定列元素
while ((line = br.readLine()) != null) {
//","分割每行第column列
//System.out.println(line.split(",")[column]);
String a= line.split(",")[column];
if(a !=null && a !=""){arrayList.add(a);}
}
}catch (Exception e){
e.printStackTrace();
}finally {
try {
br.close();
} catch (IOException e) {
e.printStackTrace();
}
}
return arrayList;
}
具体思想是:循环读取文件每一行,以,
分割为数组,再读取数组的指定列,直至循环结束。
演示csv文件如下:
读取第7列:
@Test
public void method6(){
ReadCSV readCSV = new ReadCSV();
List<String> maps = readCSV.getOneColumn("C:\\Users\\fireapproval\\Desktop\\数据集\\test1.csv", 7);
System.out.println(maps);
}
读取csv文件若干列
public List<ArrayList> readTwoColumn(String path,int column1,int column2){
List<ArrayList> list = new ArrayList<>();
try {
br = new BufferedReader(new FileReader(path));
br.readLine();
while ((line = br.readLine()) != null) {
//","取出任意两列
//System.out.println(line.split(",")[column]);
String columnOne= line.split(",")[column1] ; //取column1列
String columnTwo = line.split(",")[column2]; // 。。。
if(columnOne != "" && columnTwo !=""){
ArrayList arrayList = new ArrayList();
arrayList.add(columnOne);
arrayList.add(columnTwo);
list.add(arrayList);
}
}
}catch (Exception e){
e.printStackTrace();
}finally {
try {
br.close();
} catch (IOException e) {
e.printStackTrace();
}
}
return list;
}
读取几列定义几个参数即可。
演示:
@Test
public void method6(){
ReadCSV readCSV = new ReadCSV();
List<ArrayList> maps = readCSV.readTwoColumn("C:\\Users\\fireapproval\\Desktop\\数据集\\test.csv", 7, 9);
System.out.println(maps);
}
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/156196.html