Java實現(xiàn)讀取TXT和CSV文件內(nèi)容
最近在編寫一個通用可配置的實時ETL工具,即把通過Flink把Kafka的JSON 格式的數(shù)據(jù)解析后寫入關系型數(shù)據(jù)庫,業(yè)務要求新來一個JSON格式的業(yè)務數(shù)據(jù)后,通過在配置文件中讀取JSON和關系型數(shù)據(jù)庫中表的列映射關系,運行作業(yè)即可入庫;每一個JSON格式的API對應一個CSV的配置文件,因此需要讀取CSV的文件獲取配置,本文記錄讀取CSV和過程,順便記錄了讀取TXT的過程。
1.引入java
使用com.csvreader.CsvReader時需要在pom.xml中引用對應的jar包
<!--csv文件操作-->
<dependency>
<groupId>net.sourceforge.javacsv</groupId>
<artifactId>javacsv</artifactId>
<version>2.0</version>
</dependency>2.實現(xiàn)代碼
package util;
import com.csvreader.CsvReader;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStreamReader;
import java.nio.charset.Charset;
import java.util.ArrayList;
public class ReadFileTool {
//讀取文件
public static String readTextFile(String jsonFile) {
StringBuilder stringBuilder = new StringBuilder();
try {
//01.FileInputStream(字節(jié)流) 實現(xiàn)了InputStream接口,用來讀取文件中的字節(jié)流,參數(shù)是文件或者文件路徑+文件名稱
FileInputStream fileInputStream = new FileInputStream(jsonFile);
//02.將 fileInputStream(字節(jié)流) 流作為參數(shù),轉(zhuǎn)為InputStreamReader(字符流)
InputStreamReader inputStreamReader = new InputStreamReader(fileInputStream, "UTF-8");
//03.將 字符流(參數(shù))轉(zhuǎn)為字符串流,帶緩沖的流讀取,默認緩沖區(qū)8k
BufferedReader bufferedReader = new BufferedReader(inputStreamReader);
String tempString;
while ((tempString = bufferedReader.readLine()) != null)
{
// 將字符串 添加到 stringBuilder中
stringBuilder.append(tempString);
}
bufferedReader.close();
} catch (Exception e) {
e.printStackTrace();
}
return stringBuilder.toString();
}
//通過BufferedReader讀取CSV
public static ArrayList readCsvFileFromJava(String csvFile,String encoding) {
ArrayList<String[]> csvArrList=new ArrayList<String[]>();
StringBuilder stringBuilder = new StringBuilder();
try {
//01.FileInputStream(字節(jié)流) 實現(xiàn)了InputStream接口,用來讀取文件中的字節(jié)流,參數(shù)是文件或者文件路徑+文件名稱
FileInputStream fileInputStream = new FileInputStream(csvFile);
//02.將 fileInputStream(字節(jié)流) 流作為參數(shù),轉(zhuǎn)為InputStreamReader(字符流)
InputStreamReader inputStreamReader = new InputStreamReader(fileInputStream, encoding);
//03.將 字符流(參數(shù))轉(zhuǎn)為字符串流,帶緩沖的流讀取,默認緩沖區(qū)8k
BufferedReader bufferedReader = new BufferedReader(inputStreamReader);
String line;
while ((line = bufferedReader.readLine()) != null)
{
// System.out.println(line);
String item[] = line.split(",",-1);//CSV格式文件為逗號分隔符文件,這里根據(jù)逗號切分,-1表示獲取所有空值
csvArrList.add(item);
}
bufferedReader.close();
} catch (Exception e) {
e.printStackTrace();
}
return csvArrList;
}
//通過com.csvreader.CsvReader 讀取CSV
public static ArrayList readCsvFileFromCsvReader(String csvFile,String encoding) {
ArrayList<String[]> csvArrList=new ArrayList<String[]>();
try {
CsvReader reader = new CsvReader(csvFile, ',', Charset.forName(encoding));
reader.readHeaders();
String[] headArray = reader.getHeaders();//獲取標題
for(String a:headArray){
System.out.print(a);
}
System.out.println();
System.out.println("---------");
while (reader.readRecord()) {
// System.out.println(Arrays.asList(reader.getValues()));
// 按行讀取,并把每一行的數(shù)據(jù)添加到list集合
csvArrList.add(reader.getValues());
}
reader.close();
} catch (Exception e) {
e.printStackTrace();
}
return csvArrList;
}
//測試
public static void main(String[] args) {
String userDir = System.getProperty("user.dir");
String fileDir = userDir + File.separator + "sourceFile" + File.separator;
String cfgFileName = "dwd_op_event.csv";
String csvFullFileName = fileDir + cfgFileName;
ArrayList<String []> csvArrList =readCsvFileFromCsvReader(csvFullFileName,"GBK");
}
}到此這篇關于Java實現(xiàn)讀取TXT和CSV文件內(nèi)容的文章就介紹到這了,更多相關Java讀取TXT CSV內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
Spring Boot項目中結合MyBatis實現(xiàn)MySQL的自動主從切換功能
這篇文章主要介紹了Spring Boot項目中結合MyBatis實現(xiàn)MySQL的自動主從切換功能,本文分步驟給大家介紹的非常詳細,感興趣的朋友一起看看吧2025-04-04
springboot新建項目pom.xml文件第一行報錯的解決
這篇文章主要介紹了springboot新建項目pom.xml文件第一行報錯的解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-01-01
springboot運行到dokcer中 dockerfile的場景分析
這篇文章主要介紹了springboot運行到dokcer中 dockerfile,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2022-03-03
Spring實戰(zhàn)之使用c:命名空間簡化配置操作示例
這篇文章主要介紹了Spring實戰(zhàn)之使用c:命名空間簡化配置操作,結合實例形式詳細分析了Spring使用c:命名空間簡化配置的相關接口與配置操作技巧,需要的朋友可以參考下2019-12-12

