|
package com.bb.test;
import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStreamReader; import java.io.OutputStreamWriter; import java.util.ArrayList;
public class TestClass {
public static void main(String[] args) { new TestClass().main1(); } public void main1() { try { File inputFile1 = new File(“C:\\test\\ms949.txt”); File inputFile2 = new File(“C:\\test\\utf8.txt”); // 우선 MS949로 읽는다. 그러다 UTF-8 대체문자(65533)를 발견하면 UTF-8로 읽는다. ArrayList<String> fileContent1 = readFileMS949orUTF8(inputFile1); ArrayList<String> fileContent2 = readFileMS949orUTF8(inputFile2); System.out.println(fileContent1); System.out.println(fileContent2); } catch (Exception e) { e.printStackTrace(); } } /** * 우선 MS949로 읽는다. 그러다 UTF-8 대체문자(65533)를 발견하면 UTF-8로 읽는다. * * @param file * @return * @throws IOException * @throws Exception */ private ArrayList<String> readFileMS949orUTF8(File file) throws IOException, Exception { if (file == null || !file.exists()) { return null; }
boolean bUTF8 = false; ArrayList<String> resultList = null;
FileInputStream fileInputStream = null; InputStreamReader inputStreamReader = null; BufferedReader bufferedReader = null;
try { fileInputStream = new FileInputStream(file); inputStreamReader = new InputStreamReader(fileInputStream, “MS949”); bufferedReader = new BufferedReader(inputStreamReader);
// 우선 MS949로 읽는다. 그러다 UTF-8 대체문자(65533)를 발견하면 UTF-8로 읽는다. int len = 0; String oneLine = null; while ((oneLine = bufferedReader.readLine()) != null) { if (resultList == null) { resultList = new ArrayList<String>(); } len = oneLine.length(); for (int k=0; k<len; k++) { if (((int) oneLine.charAt(k)) == 65533) { bUTF8 = true; break; } } if (bUTF8) { break; }
resultList.add(oneLine); }
} catch (IOException e) { throw e;
} catch (Exception e) { throw e;
} finally { close(bufferedReader); close(inputStreamReader); close(fileInputStream); }
// 우선 MS949로 읽는다. 그러다 UTF-8 대체문자(65533)를 발견하면 UTF-8로 읽는다. if (bUTF8) { return readFile(file, “UTF-8”); }
return resultList; } private ArrayList<String> readFile(File file, String charset) throws IOException, Exception { if (file == null || !file.exists()) { return null; }
ArrayList<String> resultList = null;
FileInputStream fileInputStream = null; InputStreamReader inputStreamReader = null; BufferedReader bufferedReader = null;
try { fileInputStream = new FileInputStream(file); inputStreamReader = new InputStreamReader(fileInputStream, charset); bufferedReader = new BufferedReader(inputStreamReader);
String oneLine = null; while ((oneLine = bufferedReader.readLine()) != null) { if (resultList == null) { resultList = new ArrayList<String>(); }
resultList.add(oneLine); }
} catch (IOException e) { throw e;
} catch (Exception e) { throw e;
} finally { close(bufferedReader); close(inputStreamReader); close(fileInputStream); }
return resultList; } private boolean writeFile(File file, ArrayList<String> stringList, String charset, boolean bAppend) throws IOException, Exception { if (file == null) { return false; } boolean bWrite = false;
FileOutputStream fileOutputStream = null; OutputStreamWriter outputStreamWriter = null; BufferedWriter bufferedWriter = null;
try { fileOutputStream = new FileOutputStream(file, bAppend); outputStreamWriter = new OutputStreamWriter(fileOutputStream, charset); bufferedWriter = new BufferedWriter(outputStreamWriter);
if (stringList != null && stringList.size() > 0) { String oneLine = null;
int lineCount = stringList.size(); int lastIndex = lineCount – 1;
for (int i = 0; i < lineCount; i++) { oneLine = stringList.get(i);
bufferedWriter.write(oneLine, 0, oneLine.length()); if (i < lastIndex) { bufferedWriter.newLine(); } } }
bWrite = true;
} catch (IOException e) { throw e;
} catch (Exception e) { throw e;
} finally { close(bufferedWriter); close(outputStreamWriter); close(fileOutputStream); }
return bWrite; } private static void close(BufferedWriter bufferedWriter) { try { if (bufferedWriter != null) { bufferedWriter.close(); } } catch (Exception e) { // 무시
} finally { bufferedWriter = null; } } private static void close(OutputStreamWriter outputStreamWriter) { try { if (outputStreamWriter != null) { outputStreamWriter.close(); } } catch (Exception e) { // 무시
} finally { outputStreamWriter = null; } } private static void close(FileOutputStream fileOutputStream) { try { if (fileOutputStream != null) { fileOutputStream.close(); } } catch (Exception e) { // 무시
} finally { fileOutputStream = null; } } private static void close(FileInputStream fileInputStream) { try { if (fileInputStream != null) { fileInputStream.close(); } } catch (Exception e) { // 무시
} finally { fileInputStream = null; } }
private static void close(InputStreamReader inputStreamReader) { try { if (inputStreamReader != null) { inputStreamReader.close(); } } catch (Exception e) { // 무시
} finally { inputStreamReader = null; } } private static void close(BufferedReader bufferedReader) {
try { if (bufferedReader != null) { bufferedReader.close(); } } catch (Exception e) { // 무시 } finally { bufferedReader = null; } } }
|