<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    Cyh的博客

    Email:kissyan4916@163.com
    posts - 26, comments - 19, trackbacks - 0, articles - 220

    讀文件

    Posted on 2009-05-24 21:21 啥都寫點 閱讀(168) 評論(0)  編輯  收藏 所屬分類: J2SE
    關鍵技術:
    • 用RandomAccessFile打開文件輸入流,通過seek方法將讀指針移到文件內容中間,再通過read方法讀取讀指針后文件內容,常用語隨機的讀取文件

    package book.io;

    import java.io.BufferedReader;
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.FileReader;
    import java.io.IOException;
    import java.io.InputStream;
    import java.io.InputStreamReader;
    import java.io.RandomAccessFile;
    import java.io.Reader;

    /**
     * 多種方式讀文件內容。
     * 按字節讀取文件內容、按字符讀取文件內容、按行讀取文件內容、隨機讀取文件內容
     
    */
    public class ReadFromFile {
        
    /**
         * 以字節為單位讀取文件,常用于讀二進制文件,如圖片、聲音、影像等文件。
         * 
    @param fileName    文件的名
         
    */
        
    public static void readFileByBytes(String fileName){
            File file 
    = new File(fileName);
            InputStream in 
    = null;
            
    try {
                System.out.println(
    "以字節為單位讀取文件內容,一次讀一個字節:");
                
    //    一次讀一個字節
                in = new FileInputStream(file);
                
    int tempbyte;
                
    while((tempbyte=in.read()) != -1){
                    System.out.write(tempbyte);
                }
                in.close();
            } 
    catch (IOException e) {
                e.printStackTrace();
                
    return;
            }
            
    try {
                System.out.println(
    "以字節為單位讀取文件內容,一次讀多個字節:");
                
    //一次讀多個字節
                byte[] tempbytes = new byte[100];
                
    int byteread = 0;
                in 
    = new FileInputStream(fileName);
                ReadFromFile.showAvailableBytes(in);
                
    //讀入多個字節到字節數組中,byteread為一次讀入的字節數
                while ((byteread = in.read(tempbytes)) != -1){
                    System.out.write(tempbytes, 
    0, byteread);
                }
            } 
    catch (Exception e1) {
                e1.printStackTrace();
            } 
    finally {
                
    if (in != null){
                    
    try {
                        in.close();
                    } 
    catch (IOException e1) {
                    }
                }
            }
        }
        
    /**
         * 以字符為單位讀取文件,常用于讀文本,數字等類型的文件
         * 
    @param fileName    文件名
         
    */
        
    public static void readFileByChars(String fileName){
            File file 
    = new File(fileName);
            Reader reader 
    = null;
            
    try {
                System.out.println(
    "以字符為單位讀取文件內容,一次讀一個字節:");
                
    //    一次讀一個字符
                reader = new InputStreamReader(new FileInputStream(file));
                
    int tempchar;
                
    while ((tempchar = reader.read()) != -1){
                    
    //對于windows下,\r\n這兩個字符在一起時,表示一個換行。
                    
    //但如果這兩個字符分開顯示時,會換兩次行。
                    
    //因此,屏蔽掉\r,或者屏蔽\n。否則,將會多出很多空行。
                    if (((char)tempchar) != '\r'){
                        System.out.print((
    char)tempchar);
                    }
                }
                reader.close();
            } 
    catch (Exception e) {
                e.printStackTrace();
            }
            
    try {
                System.out.println(
    "以字符為單位讀取文件內容,一次讀多個字節:");
                
    //一次讀多個字符
                char[] tempchars = new char[30];
                
    int charread = 0;
                reader 
    = new InputStreamReader(new FileInputStream(fileName));
                
    //讀入多個字符到字符數組中,charread為一次讀取字符數
                while ((charread = reader.read(tempchars))!=-1){
                    
    //同樣屏蔽掉\r不顯示
                    if ((charread == tempchars.length)&&(tempchars[tempchars.length-1!= '\r')){
                        System.out.print(tempchars);
                    }
    else{
                        
    for (int i=0; i<charread; i++){
                            
    if(tempchars[i] == '\r'){
                                
    continue;
                            }
    else{
                                System.out.print(tempchars[i]);
                            }
                        }
                    }
                }
                
            } 
    catch (Exception e1) {
                e1.printStackTrace();
            }
    finally {
                
    if (reader != null){
                    
    try {
                        reader.close();
                    } 
    catch (IOException e1) {
                    }
                }
            }
        }
        
    /**
         * 以行為單位讀取文件,常用于讀面向行的格式化文件
         * 
    @param fileName    文件名
         
    */
        
    public static void readFileByLines(String fileName){
            File file 
    = new File(fileName);
            BufferedReader reader 
    = null;
            
    try {
                System.out.println(
    "以行為單位讀取文件內容,一次讀一整行:");
                reader 
    = new BufferedReader(new FileReader(file));
                String tempString 
    = null;
                
    int line = 1;
                
    //一次讀入一行,直到讀入null為文件結束
                while ((tempString = reader.readLine()) != null){
                    
    //顯示行號
                    System.out.println("line " + line + "" + tempString);
                    line
    ++;
                }
                reader.close();
            } 
    catch (IOException e) {
                e.printStackTrace();
            } 
    finally {
                
    if (reader != null){
                    
    try {
                        reader.close();
                    } 
    catch (IOException e1) {
                    }
                }
            }
        }
        
    /**
         * 隨機讀取文件內容
         * 
    @param fileName    文件名
         
    */
        
    public static void readFileByRandomAccess(String fileName){
            RandomAccessFile randomFile 
    = null;
            
    try {
                System.out.println(
    "隨機讀取一段文件內容:");
                
    //    打開一個隨機訪問文件流,按只讀方式
                randomFile = new RandomAccessFile(fileName, "r");
                
    //    文件長度,字節數
                long fileLength = randomFile.length();
                
    //    讀文件的起始位置
                int beginIndex = (fileLength > 4? 4 : 0;
                
    //將讀文件的開始位置移到beginIndex位置。
                randomFile.seek(beginIndex);
                
    byte[] bytes = new byte[10];
                
    int byteread = 0;
                
    //一次讀10個字節,如果文件內容不足10個字節,則讀剩下的字節。
                
    //將一次讀取的字節數賦給byteread
                while ((byteread = randomFile.read(bytes)) != -1){
                    System.out.write(bytes, 
    0, byteread);
                }
            } 
    catch (IOException e){
                e.printStackTrace();
            } 
    finally {
                
    if (randomFile != null){
                    
    try {
                        randomFile.close();
                    } 
    catch (IOException e1) {
                    }
                }
            }
        }
        
    /**
         * 顯示輸入流中還剩的字節數
         * 
    @param in
         
    */
        
    private static void showAvailableBytes(InputStream in){
            
    try {
                System.out.println(
    "當前字節輸入流中的字節數為:" + in.available());
            } 
    catch (IOException e) {
                e.printStackTrace();
            }
        }
        
        
    public static void main(String[] args) {
            String fileName 
    = "C:/temp/newTemp.txt";
            ReadFromFile.readFileByBytes(fileName);
            ReadFromFile.readFileByChars(fileName);
            ReadFromFile.readFileByLines(fileName);
            ReadFromFile.readFileByRandomAccess(fileName);
        }
    }



                                                                                                           --    學海無涯
            

    主站蜘蛛池模板: 一本色道久久88亚洲综合| 亚洲中文字幕无码久久| 免费在线观看你懂的| 91免费国产自产地址入| 国产在线精品一区免费香蕉| 亚洲av成人中文无码专区| 亚洲区视频在线观看| 亚洲男人天堂2017| 亚洲乱码中文字幕久久孕妇黑人| 永久免费毛片手机版在线看| 亚洲一区二区三区免费视频| 黄网站色视频免费在线观看的a站最新| 4399影视免费观看高清直播| 中出五十路免费视频| 午夜在线免费视频| 美女视频黄a视频全免费网站色| 亚洲乱码日产精品一二三| 2020久久精品亚洲热综合一本| 亚洲欧洲高清有无| 亚洲成人网在线播放| 亚洲网红精品大秀在线观看| 亚洲精选在线观看| 亚洲综合精品一二三区在线| 亚洲国产综合精品中文第一区| 亚洲色中文字幕无码AV| 亚洲色欲色欲www在线丝| 亚洲精品国产精品乱码不99| 亚洲人成网站在线播放vr| 区三区激情福利综合中文字幕在线一区亚洲视频1| 国产网站在线免费观看| 免费无码看av的网站| 日日夜夜精品免费视频| 国产片免费在线观看| 国产免费av片在线无码免费看 | 伊人久久综在合线亚洲2019| 亚洲妇熟XXXX妇色黄| 亚洲国语精品自产拍在线观看| 亚洲天堂男人天堂| 91亚洲性爱在线视频| 亚洲欧美日韩中文无线码 | 免费精品国产日韩热久久|