1. 程式人生 > >Java 讀取 txt 檔案內容到容器 List

Java 讀取 txt 檔案內容到容器 List

方法一:

一、桌面上準備 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);

      }

    }

 

三、執行結果為: