Java 讀取 txt 檔案內容到容器 List
阿新 • • 發佈:2018-12-24
方法一:
一、桌面上準備 DataObject.txt 檔案,內容為:
二、開啟 Eclipse,編寫程式碼如下:
import java.io.BufferedReader; import java.io.File; import java.io.FileReader; import java.util.ArrayList; import java.util.List; import javax.swing.filechooser.FileSystemView; public class test003 { public static void main(String[] args) { FileSystemView fsv = FileSystemView.getFileSystemView(); File com = fsv.getHomeDirectory(); String deskPath = com.getPath(); String filePath = deskPath + "\\" + "DataObject.txt"; List<String> list = new ArrayList<String>(); try { list = getFileContext( filePath ); for( int i = 0; i < list.size(); i++ ) { String lineStr = list.get(i); System.out.println( "lineStr = " + lineStr ); } } catch (Exception e) { e.printStackTrace(); } } /** * 獲取txt檔案內容, 並按行放入list中 */ public static List<String> getFileContext( String path ) { FileReader fileReader = null; BufferedReader bufferedReader = null; List<String> list = new ArrayList<String>(); String str = ""; try { fileReader = new FileReader( path ); bufferedReader = new BufferedReader( fileReader ); while( (str = bufferedReader.readLine()) != null ) { if( str.trim().length() > 2 ) { list.add( str ); } } } catch ( Exception e ) { e.printStackTrace(); } finally { try { if (bufferedReader != null) { bufferedReader.close(); } } catch (Exception e2) { e2.printStackTrace(); } try { if (fileReader != null) { fileReader.close(); } } catch (Exception e2) { e2.printStackTrace(); } } return list; } }
三、執行結果為:
方法二:
一、桌面上準備 DataObject.txt 檔案,內容為:
二、開啟 Eclipse,編寫程式碼如下:
import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.nio.charset.Charset; import java.util.ArrayList; import java.util.List; import javax.swing.filechooser.FileSystemView; public class test003 { public static void main(String[] args) { FileSystemView fsv = FileSystemView.getFileSystemView(); File com = fsv.getHomeDirectory(); String deskPath = com.getPath(); String filePath = deskPath + "\\" + "DataObject.txt"; List<String> list = new ArrayList<String>(); try { list = readFileToList( filePath ); for( int i = 0; i < list.size(); i++ ) { String lineStr = list.get(i); System.out.println( "lineStr = " + lineStr ); } } catch (Exception e) { e.printStackTrace(); } } /** * 讀取檔案內容到容器List * @param fileName 檔名稱 */ public static List<String> readFileToList( String fileName ) { List<String> list = new ArrayList<String>(); BufferedReader br = null; try { String line = null; br = new BufferedReader( new UnicodeReader( new FileInputStream(fileName), Charset.defaultCharset().name()) ); while ( (line = br.readLine()) != null ) { list.add(line); } } catch ( IOException e ) { e.printStackTrace(); } finally { try { if (null != br) { br.close(); } } catch (Exception e2) { e2.printStackTrace(); } } return list; } }
UnicodeReader 類:
import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.PushbackInputStream; import java.io.Reader; public class UnicodeReader extends Reader { PushbackInputStream internalIn; InputStreamReader internalIn2 = null; String defaultEnc; private static final int BOM_SIZE = 4; public UnicodeReader(InputStream in, String defaultEnc) { internalIn = new PushbackInputStream(in, BOM_SIZE); this.defaultEnc = defaultEnc; } public String getDefaultEncoding() { return defaultEnc; } public String getEncoding() { if (internalIn2 == null) return null; return internalIn2.getEncoding(); } protected void init() throws IOException { if (internalIn2 != null) return; String encoding; byte bom[] = new byte[BOM_SIZE]; int n, unread; n = internalIn.read(bom, 0, bom.length); if ( (bom[0] == (byte)0x00) && (bom[1] == (byte)0x00) && (bom[2] == (byte)0xFE) && (bom[3] == (byte)0xFF) ) { encoding = "UTF-32BE"; unread = n - 4; } else if ( (bom[0] == (byte)0xFF) && (bom[1] == (byte)0xFE) && (bom[2] == (byte)0x00) && (bom[3] == (byte)0x00) ) { encoding = "UTF-32LE"; unread = n - 4; } else if ( (bom[0] == (byte)0xEF) && (bom[1] == (byte)0xBB) && (bom[2] == (byte)0xBF) ) { encoding = "UTF-8"; unread = n - 3; } else if ( (bom[0] == (byte)0xFE) && (bom[1] == (byte)0xFF) ) { encoding = "UTF-16BE"; unread = n - 2; } else if ( (bom[0] == (byte)0xFF) && (bom[1] == (byte)0xFE) ) { encoding = "UTF-16LE"; unread = n - 2; } else { encoding = defaultEnc; unread = n; } if (unread > 0) internalIn.unread(bom, (n - unread), unread); if (encoding == null) { internalIn2 = new InputStreamReader(internalIn); } else { internalIn2 = new InputStreamReader(internalIn, encoding); } } public void close() throws IOException { init(); internalIn2.close(); } public int read(char[] cbuf, int off, int len) throws IOException { init(); return internalIn2.read(cbuf, off, len); } }
三、執行結果為: