首页 > 编程语言 > 详细

Java 读取文件指定行数据

时间:2020-07-10 01:16:47      阅读:363      评论:0      收藏:0      [点我收藏+]
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;
    }
}

 

Java 读取文件指定行数据

原文:https://www.cnblogs.com/baoqinghe/p/13277088.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!