public FileInputStream(String name)
throws FileNotFoundException {
this(name != null ? new File(name) : null);
}
InputStreamReader inputStreamReader = null;
try {
inputStreamReader = new InputStreamReader(
new FileInputStream(fileName),
"UTF-8");
int readChar = 0;
while ((readChar = inputStreamReader.read()) != -1) {
System.out.println((char)readChar);
}
} catch ....
public InputStreamReader(InputStream in, String charsetName)
throws UnsupportedEncodingException {
// charsetName : "UTF-8"으로 넘김
public static void CharReadFile(String fileName,
String charsetName) {
InputStreamReader inputStreamReader = null;
try {
inputStreamReader = new InputStreamReader(
new FileInputStream(fileName),
charsetName);
int readChar = 0;
while ((readChar = inputStreamReader.read()) != -1) {
System.out.println((char)readChar);
}
} catch (UnsupportedEncodingException e) {
System.out.println("엔코딩에 문제가 있습니다.");
throw new RuntimeException(e);
} catch (IOException e) {
System.out.println("파일을 확인해 주세요");
throw new RuntimeException(e);
} finally {
if (inputStreamReader != null ) {
try {
inputStreamReader.close();
} catch (IOException e) {
throw new RuntimeException(e);
}
}
}
}
}
BufferedReader bufferedReader = null;
try {
bufferedReader = new BufferedReader(
new InputStreamReader(
new FileInputStream(fileName),
"UTF-8"));
String readLine;
while ((readLine = bufferedReader.readLine()) != null) {
System.out.println(readLine);
}
} catch ( .....
public static void LineReadFile(String fileName, String charsetName) {
BufferedReader bufferedReader = null;
try {
bufferedReader = new BufferedReader(
new InputStreamReader(
new FileInputStream(fileName),
charsetName));
String readLine;
while ((readLine = bufferedReader.readLine()) != null) {
System.out.println(readLine);
}
} catch (UnsupportedEncodingException e) {
System.out.println("엔코딩에 문제가 있습니다.");
throw new RuntimeException(e);
} catch (IOException e) {
System.out.println("파일을 확인해 주세요");
throw new RuntimeException(e);
} finally {
if (bufferedReader != null ) {
try {
bufferedReader.close();
} catch (IOException e) {
throw new RuntimeException(e);
}
}
}
}
while ((readLine = bufferedReader.readLine()) != null) {
byte[] utf8Bytes = readLine.getBytes("UTF-8");
String utf8String = new String(utf8Bytes, "UTF-8");
System.out.println(utf8String);
}
public static void ConvertLineReadFile(String fileName,
String fromCharset ,
String toCharset) {
BufferedReader bufferedReader = null;
try {
bufferedReader = new BufferedReader(
new InputStreamReader(
new FileInputStream(fileName),
fromCharset));
String readLine;
while ((readLine = bufferedReader.readLine()) != null) {
byte[] utf8Bytes = readLine.getBytes(toCharset);
String utf8String = new String(utf8Bytes, toCharset);
System.out.println(utf8String);
}
} catch (UnsupportedEncodingException e) {
System.out.println("엔코딩에 문제가 있습니다.");
throw new RuntimeException(e);
} catch (IOException e) {
System.out.println("파일을 확인해 주세요");
throw new RuntimeException(e);
} finally {
if (bufferedReader != null ) {
try {
bufferedReader.close();
} catch (IOException e) {
throw new RuntimeException(e);
}
}
}
}
public FileReader(String fileName, Charset charset) throws IOException {
super(new FileInputStream(fileName), charset);
}
// super 로 Charset 을 전달 하기 위해서는 Charset.forName(fromCharset)을 사용해야 한다.
public InputStreamReader(InputStream in, Charset cs) {
super(in);
if (cs == null)
throw new NullPointerException("charset");
sd = StreamDecoder.forInputStreamReader(in, this, cs);
}
BufferedReader bufferedReader = null;
try {
bufferedReader = new BufferedReader(
new FileReader(fileName, Charset.forName("UTF-8")) );
String readLine;
while ((readLine = bufferedReader.readLine()) != null) {
byte[] utf8Bytes = readLine.getBytes(toCharset);
String utf8String = new String(utf8Bytes, toCharset);
System.out.println(utf8String);
}
} catch ( .....
public static void ConvertLineReaderFile(String fileName,
String fromCharset ,
String toCharset) {
BufferedReader bufferedReader = null;
try {
bufferedReader = new BufferedReader(
new FileReader(fileName, Charset.forName(fromCharset)) );
String readLine;
while ((readLine = bufferedReader.readLine()) != null) {
byte[] utf8Bytes = readLine.getBytes(toCharset);
String utf8String = new String(utf8Bytes, toCharset);
System.out.println(utf8String);
}
} catch (UnsupportedEncodingException e) {
System.out.println("엔코딩에 문제가 있습니다.");
throw new RuntimeException(e);
} catch (IOException e) {
System.out.println("파일을 확인해 주세요");
throw new RuntimeException(e);
} finally {
if (bufferedReader != null ) {
try {
bufferedReader.close();
} catch (IOException e) {
throw new RuntimeException(e);
}
}
}
}
// 라인 단위 읽기
row = convertCharSet(br, frpVO.getToCharset());
while (row != null) {
// CSV 헤더 포함 여부
if (frpVO.isHeader()) {
// 반환 값 List에 저장
results.add(getCols( frpVO.getDelimiter(), row));
} else {
frpVO.setHeader(true);
}
// 다음 라인 단위 읽기
row = convertCharSet(br, frpVO.getToCharset());
}
// CSV 파일과 같이 구분자가 있는 것에 대한 처리
private static <T> T getCols(String delimiter, String row) {
if (delimiter != null) {
String[] columns = row.split(delimiter);
// TODO 이관에서 비동기 처리 저장 System.out.println("String[] :" + columns);
return (T) columns;
} else {
// TODO 이관에서 비동기 처리 저장
System.out.println("String :" + row);
}
return (T) row;
}
package com.hyomee;
import java.io.*;
import java.util.ArrayList;
import java.util.List;
public class FileReadUTIL {
/**
* 파일을 읽고 List로 돌려줌
* @param file 파일 명이 포함된 파일 경로
* @param frpVO 파일을 읽고 해석 할 때 속성
* @return
* @param <T> List안에 있는 객체로 String or String[]
*/
public static <T> List<T> read(String file,
FileReadParameterVO frpVO ) {
List<T> results = new ArrayList<>();
BufferedReader br = null;
String row = null;
try {
// 문자셋 포함 여부에 따른 문자셋 변환
if (frpVO.getCharset() != null) {
br = new BufferedReader(new InputStreamReader(
new FileInputStream(file),
frpVO.getCharset()));
} else {
br = new BufferedReader(new InputStreamReader(new FileInputStream(file)));
}
// 라인 단위 읽기
row = convertCharSet(br, frpVO.getToCharset());
while (row != null) {
// CSV 헤더 포함 여부
if (frpVO.isHeader()) {
// 반환 값 List에 저장
results.add(getCols( frpVO.getDelimiter(), row));
} else {
frpVO.setHeader(true);
}
// 다음 라인 단위 읽기
row = convertCharSet(br, frpVO.getToCharset());
}
} catch ( UnsupportedEncodingException e) {
System.out.println("문자셋을 확인해 주세요.");
throw new RuntimeException(e);
} catch (IOException e) {
System.out.println("파일을 확인해 주세요.");
throw new RuntimeException(e);
} finally {
if (br != null ) {
try {
br.close();
} catch (IOException e) {
throw new RuntimeException(e);
}
}
}
return results;
}
/**
* CSV 파일과 같이 구분자가 있는 것에 대한 처리
* @param delimiter
* @param row
* @return
* @param <T>
*/
private static <T> T getCols(String delimiter, String row) {
if (delimiter != null) {
String[] columns = row.split(delimiter);
// TODO 이관에서 비동기 처리 저장 System.out.println("String[] :" + columns);
return (T) columns;
} else {
// TODO 이관에서 비동기 처리 저장
System.out.println("String :" + row);
}
return (T) row;
}
/**
* CSV 파일과 같이 구분자에 의해서 행/열로 되어 있는 데이터에
* 대해서 열을 String[]로 변환 후 반환
* - 문자셋 이 없으면 String 반환
* @param br
* @param charset
* @return
* @throws IOException
*/
private static String convertCharSet(BufferedReader br, String charset ) throws IOException {
String record = br.readLine();
if ( charset != null && record != null) {
byte[] utf8Bytes = record.getBytes(charset);
return new String(utf8Bytes, charset);
}
return record;
}
}
class FileReadParameterVO {
private boolean isHeader; // CSV 해더 포함 여부
private final String delimiter; // CSV 열 구분자
private final String charset; // 원본 파일의 문자셋
private final String toCharset; // 변경할 문자셋
FileReadParameterVO(boolean isHeader,
String delimiter,
String charset,
String toCharset) {
this.isHeader = isHeader;
this.delimiter = delimiter;
this.charset = charset;
this.toCharset = toCharset;
}
// 해더 포함 기본 파라메터 생성
public static FileReadParameterVO initFrpVO() {
return new FileReadParameterVO(true, null, null, null) ;
}
// 해더 포함 문자셋 지정 생성
public static FileReadParameterVO initFrpVO(String charset) {
return new FileReadParameterVO(true, null, charset, null) ;
}
// 해더 포함 문자셋을 다른 문자셋으로 변경
public static FileReadParameterVO initFrpVO(String charset, String toCharset) {
return new FileReadParameterVO(true, null, charset, toCharset) ;
}
// 해더 포함 여부 설정 , CSV 파일 열 구분자 지정
public static FileReadParameterVO initFrpVO(boolean isHeader, String delimiter) {
return new FileReadParameterVO(isHeader, delimiter, null , null) ;
}
// 해더 포함 여부 설정 , 문자셋을 다른 문자셋으로 변경
public static FileReadParameterVO initFrpVO(boolean isHeader, String charset, String toCharset) {
return new FileReadParameterVO(isHeader, null, charset, toCharset) ;
}
// 해더 포함 여부 설정 , CSV 구분자, 문자셋을 다른 문자셋으로 변경
public static FileReadParameterVO initFrpVO(boolean isHeader,
String delimiter,
String charset,
String toCharset) {
return new FileReadParameterVO(isHeader, delimiter, charset, toCharset) ;
}
public boolean isHeader() {
return isHeader;
}
public boolean setHeader(boolean isHeader) {
return this.isHeader = isHeader;
}
public String getDelimiter() {
return delimiter;
}
public String getCharset() {
return charset;
}
public String getToCharset() {
return toCharset;
}
}
List<T> lists = FileReadUTIL.read("D:\\문서\\교육\\txt\\CAS_DAS_이관대사기능_EUCKR.csv",
FileReadParameterVO.initFrpVO( true,",","EUC-KR", "UTF-8"));
int row = 0;
for ( T strings : lists) {
int j = 0;
for ( String str : (String[]) strings) {
System.out.println(String.format("[ %s : %s ] : %s", row, col, str));
}
row = row + 1;
}