<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);
        }
    }



                                                                                                           --    學海無涯
            

    主站蜘蛛池模板: 久久久久免费看黄A片APP| 国产一级在线免费观看| 亚洲视频免费在线播放| 亚洲高清在线播放| 久久久久国产精品免费网站| 亚洲国产一成人久久精品| 中出五十路免费视频| 亚洲精品国精品久久99热一| 国产日韩一区二区三免费高清| 亚洲国产精品无码AAA片| 丁香花在线视频观看免费 | 国产一级淫片免费播放电影| 亚洲丰满熟女一区二区哦| 国产麻豆免费观看91| 牛牛在线精品观看免费正| 亚洲精品无码国产| 91黑丝国产线观看免费| 精品亚洲AV无码一区二区三区 | sihu国产精品永久免费| 精品久久久久久亚洲| 久久国产色AV免费观看| 亚洲五月丁香综合视频| 免费国产人做人视频在线观看| 一级毛片免费全部播放| 亚洲国产精品自在线一区二区| 国产在线观看片a免费观看| 色欲aⅴ亚洲情无码AV| 亚洲熟妇无码乱子AV电影| 久久大香香蕉国产免费网站| 亚洲一区二区三区在线| 亚洲国产精品毛片av不卡在线| 中文字幕免费在线看线人动作大片| 亚洲天堂中文字幕| 日本v片免费一区二区三区| 中文字幕免费在线播放| 亚洲人成网国产最新在线| 亚洲av午夜成人片精品电影| 久久久久国产精品免费网站| 亚洲欧美aⅴ在线资源| 亚洲精品乱码久久久久66| 免费无码看av的网站|