如何通过java过滤文本文件并将结果保存到新文件中

如何通过java过滤文本文件并将结果保存到新文件中,java,file,arraylist,bufferedreader,bufferedwriter,Java,File,Arraylist,Bufferedreader,Bufferedwriter,您好,我的问题是如何按列过滤文本文件,我的意思是我想从行之间的范围剪切文件。 我的文件包含此类数据: 284015160747447;8935901990807474474; 284015160747448;8935901990807474482; 284015160747449;8935901990807474490; 284015160747450;8935901990807474508; 284015160747451;8935901990807474516; 28401516074745

您好,我的问题是如何按列过滤文本文件,我的意思是我想从行之间的范围剪切文件。 我的文件包含此类数据:

284015160747447;8935901990807474474;
284015160747448;8935901990807474482;
284015160747449;8935901990807474490;
284015160747450;8935901990807474508;
284015160747451;8935901990807474516;
284015160747452;8935901990807474524;
284015160747453;8935901990807474532;
284015160747454;8935901990807474540;
284015160747455;8935901990807474557;
284015160747456;8935901990807474565;
284015160747457;8935901990807474573;
284015160747458;8935901990807474581;
284015160747459;8935901990807474599;
284015160747460;8935901990807474607;
284015160747461;8935901990807474615;
284015160747462;8935901990807474623;
284015160747463;8935901990807474631;

我希望用户能够筛选要从原始文件写入新创建文件的内容: 例如,从893590199080747490到8935901990807474532,对于此数字,起始行和最后一行在此范围内

public class Test_read_file {
    public static List<String> readFile() throws IOException {
        try (BufferedReader br = new BufferedReader(new FileReader("C:\\\\\\\\Users\\\\\\\\Admin\\\\\\\\Desktop\\\\\\\\Work Files\\\\\\\\314-WO0000001133814\\\\\\\\Cards\\\\\\\\MBD10760_182.out"))) {
            List<String> listOfData = new ArrayList<>();
            String d;
            while ((d = br.readLine()) != null) {
                listOfData.add(d);
            }
            return listOfData;
        }
    }

    public static void writeFile(List<String> listOfData) throws IOException {
        try (BufferedWriter bw = new BufferedWriter(new FileWriter("C:\\\\\\\\Users\\\\\\\\Admin\\\\\\\\Desktop\\\\\\\\Work Files\\\\\\\\314-WO0000001133814\\\\\\\\Cards\\\\\\\\MBD10760_187.out"))) {
            for (String str : listOfData) {
                bw.write(str);
                bw.newLine();
            }
        }
    }

    public static void main(String[] args) throws IOException {
        List<String> data = readFile();
        writeFile(data);
    }
}
public static void writeFile(List<String> listOfData, long num1, long num2) 
   throws IOException {
   try (BufferedWriter bw = new BufferedWriter(new FileWriter(OUT))) {          
        for (String str : listOfData) {
            // change made here
            if (Long.valueOf(str) >= num1 && Long.valueOf(str) <= num2) {
                bw.write(str);
                bw.newLine();
            }           
        }       
    }   
}
公共类测试\u读取\u文件{
公共静态列表readFile()引发IOException{
缓冲区领导层br=新缓冲区领导层(新文件阅读器)新文件阅读器(新文件阅读器)新文件阅读器(新文件阅读器)新文件阅读器(新文件阅读器)新文件阅读器(新文件阅读器(“C C C C:试试(缓冲区领导层br br br=新缓冲区领导层(新文件阅读器)br=新缓冲区领导层(新文件阅读器)新文件阅读器(新文件阅读器)新文件阅读器(新文件读者))))以下(C:C:C:C:C::::::\ \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\()("卡片"()(MBD10760(u 182.out))){
List listOfData=new ArrayList();
字符串d;
而((d=br.readLine())!=null){
添加(d);
}
返回数据列表;
}
}
公共静态void writeFile(List listOfData)引发IOException{
缓冲作家bw=新的缓冲作家bw=新的缓冲作家bw=新的缓冲作家bw=新的缓冲作家bw=新的缓冲作家(新的文件作者)新的文件作者(新的文件作者)新的文件作者(新的文件作者)新的缓冲作家(新的文件作者)新的文件作者(新的文件作者)新的文件作者(新的文件作者)新的文件作者(C)C:C:C:C:C:C:C:C:C:C:C::::::.\\\\\\11\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\写写写写写写写写写写写写写作者\\\\\(明信片)(明信片)(明信片)(明信片)(明信片)(明信片{
for(字符串str:listOfData){
bw.write(str);
换行符();
}
}
}
公共静态void main(字符串[]args)引发IOException{
列表数据=readFile();
可写文件(数据);
}
}

对代码进行以下更改:

  • 使用扫描仪接受要筛选的值:

    public static void main(String[] args) throws IOException {
        List<String> data = readFile();         
        Scanner sc = new Scanner(System.in);        
        System.out.println("Enter range");      
        long num1 = sc.nextLong();      
        long num2 = sc.nextLong();      
        writeFile(data, num1, num2);
        sc.close();     
    }
    
  • 使用传入的范围,它将只写入落下的数字 在这个范围内

    public class Test_read_file {
        public static List<String> readFile() throws IOException {
            try (BufferedReader br = new BufferedReader(new FileReader("C:\\\\\\\\Users\\\\\\\\Admin\\\\\\\\Desktop\\\\\\\\Work Files\\\\\\\\314-WO0000001133814\\\\\\\\Cards\\\\\\\\MBD10760_182.out"))) {
                List<String> listOfData = new ArrayList<>();
                String d;
                while ((d = br.readLine()) != null) {
                    listOfData.add(d);
                }
                return listOfData;
            }
        }
    
        public static void writeFile(List<String> listOfData) throws IOException {
            try (BufferedWriter bw = new BufferedWriter(new FileWriter("C:\\\\\\\\Users\\\\\\\\Admin\\\\\\\\Desktop\\\\\\\\Work Files\\\\\\\\314-WO0000001133814\\\\\\\\Cards\\\\\\\\MBD10760_187.out"))) {
                for (String str : listOfData) {
                    bw.write(str);
                    bw.newLine();
                }
            }
        }
    
        public static void main(String[] args) throws IOException {
            List<String> data = readFile();
            writeFile(data);
        }
    }
    
    public static void writeFile(List<String> listOfData, long num1, long num2) 
       throws IOException {
       try (BufferedWriter bw = new BufferedWriter(new FileWriter(OUT))) {          
            for (String str : listOfData) {
                // change made here
                if (Long.valueOf(str) >= num1 && Long.valueOf(str) <= num2) {
                    bw.write(str);
                    bw.newLine();
                }           
            }       
        }   
    }
    
    publicstaticvoidwritefile(列表数据,长num1,长num2)
    抛出IOException{
    try(BufferedWriter bw=new BufferedWriter(new FileWriter(OUT)){
    for(字符串str:listOfData){
    //这里的零钱
    
    如果(Long.valueOf(str)>=num1&&Long.valueOf(str)你能详细解释一下这些列的意思吗?示例文件是每行显示一行吗?还是只是一个长字符串?是的,它显示文本文件,它包含两列,第一列:28401560747447,第二列89359019908074744,以;分隔。我成功地读写了文件,但我想按第二列过滤文本文件并过滤所有内容某些范围之间的数据,例如从893590199080747490到8935901990807474532写入新文件两条记录之间的所有行SSO每行包含4个数字?还假设范围是从
    28401560747447
    89359019908074482
    ,这是否意味着要写入以下数字?-28401607447;8935901990807474;2840151607448;8935901990807474482;这是一行:2840151607447;89359019908074744。我不想从第二列8935901990807474进行筛选,并保存给定范围之间的所有记录。因此,您只想将第二列中出现的数字写入给定范围的文件中?请提供一个示例输出陆上通信线。