Java 讀取文件指定行數據


public class ReadFileDemo1 {
    /**
     * 獲取錯誤文件中的記錄號
     * @param sourceFile
     * @return
     */
    public static int[] readBadFile(String sourceFile){
        FileReader in = null;
        LineNumberReader reader = null;
        int[] array = new int[0];
        try {
            //獲取文件總行數
            long totalLine = Files.lines(Paths.get(sourceFile)).count();
            //構建數組
            array = new int[(int)(totalLine)];
            in = new FileReader(sourceFile);
            reader = new LineNumberReader(in);
            String s = reader.readLine();
            int i = 0;
            while(s != null){
                System.out.println(s);
                int index = s.indexOf(":");
                array[i++] = Integer.parseInt(s.substring(2,index)) + 1;
                s = reader.readLine();
            }

        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            closeResource(in, reader);
        }
        return array;
    }

    /**
     * 讀取文件指定行數(讀取一行)
     * @param filePath
     * @param lineNumber
     */
    public static String readAppointedLineNumber(String filePath,int lineNumber){
        String appointedLine = "";
        FileReader in = null;
        LineNumberReader reader = null;
        try {
            in = new FileReader(filePath);
            reader = new LineNumberReader(in);
            long totalLine = Files.lines(Paths.get(filePath)).count();
            if(lineNumber < 0 || lineNumber > totalLine){
                return "指定行【"+lineNumber+"】不在文件行數范圍內";
            }
            int line = 1;
            reader.setLineNumber(lineNumber);
            long i = reader.getLineNumber();
            String s = "";
            while((s = reader.readLine()) != null){
                if(i == line){
                    appointedLine = s;
                    break;
                }
                line++;
            }
            return appointedLine;
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            closeResource(in, reader);
        }
        return appointedLine;
    }

    /**
     * 讀取文件指定行數(讀取多行)
     * @param filePath
     * @param lineArray
     */
    public static List<String> readAppointedLineNumberArray(String filePath,int[] lineArray){
        FileReader in = null;
        LineNumberReader reader = null;
        List<String> resultStr = new ArrayList<String>();
        //對數組按從小到大排序
        lineArray = sortArray(lineArray);
        if(lineArray.length == 0){
            return new ArrayList<String>();
        }
        try {
            in = new FileReader(filePath);
            reader = new LineNumberReader(in);
            int lineNumber = lineArray.length;
            int line = 1;
            int i = 0;
            String s = "";
            while((s = reader.readLine()) != null){
                if(i < lineNumber && line ==lineArray[i]){
                    i++;
                    System.out.println(s);
                    resultStr.add(s);
                }
                line++;
            }
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            closeResource(in, reader);
        }
        return resultStr;
    }


    /**
     * 關閉資源
     * @param in
     * @param reader
     */
    public static  void closeResource(FileReader in,LineNumberReader reader){
        try {
            if(reader != null){
                reader.close();
            }
            if(in != null){
                in.close();
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    
    /**
     * 冒泡排序
     * @param array
     * @return
     */
    public static int[] sortArray(int[] array){
        if(array.length == 0){
            return array;
        }
        for(int i = 0; i < array.length; i++){
            for(int j = 0; j < array.length-i-1; j++){
                if(array[j+1] < array[j]){
                    int temp = array[j+1];
                    array[j + 1] = array[j];
                    array[j] = temp;
                }
            }
        }
        return array;
    }
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM