Java Eclipse中能否对BufferedReader读取的Excel数值进行排序?
嘿,我来帮你搞定这个问题~
首先先提个小前提:你能用BufferedReader读取Excel文件,应该是把Excel另存成**CSV格式(逗号分隔的纯文本文件)**了吧?毕竟普通的.xlsx/.xls是二进制文件,BufferedReader直接读会乱码,这点先确认下哦。
接下来分两种方案给你,都是新手友好的简单实现:
方案一:最省心的方式——不用转回BufferedReader
其实你已经把数据从文件里读出来了,排序后直接用数组/List处理就好,完全没必要硬绕回BufferedReader,这是最直接的思路:
import java.io.BufferedReader; import java.io.FileReader; import java.io.IOException; import java.util.ArrayList; import java.util.Collections; import java.util.List; public class SortExcelData { public static void main(String[] args) { // 用来存读取到的所有double数值 List<Double> dataList = new ArrayList<>(); // 替换成你的CSV文件路径 String filePath = "你的文件路径.csv"; try (BufferedReader br = new BufferedReader(new FileReader(filePath))) { String line; // 逐行读取文件(假设每行一个double值) while ((line = br.readLine()) != null) { // 去掉每行可能的空格,转成double类型 double num = Double.parseDouble(line.trim()); dataList.add(num); } // 对数值进行升序排序(默认就是升序,要降序可以用Collections.reverseOrder()) Collections.sort(dataList); // 现在你就可以直接用排序后的dataList了,比如遍历处理 System.out.println("排序后的数值:"); for (Double num : dataList) { // 这里替换成你后续要处理数值的逻辑 System.out.println("处理数值:" + num); } } catch (IOException e) { System.out.println("读取文件出错啦!"); e.printStackTrace(); } catch (NumberFormatException e) { System.out.println("文件里有不是double格式的内容,检查一下哦!"); e.printStackTrace(); } } }
方案二:一定要转回BufferedReader的情况
如果因为某些需求必须用BufferedReader来读取排序后的数据,那我们可以把排序后的数值拼接成一个每行一个数值的大字符串,再用StringReader包装成BufferedReader:
import java.io.BufferedReader; import java.io.FileReader; import java.io.IOException; import java.io.StringReader; import java.util.ArrayList; import java.util.Collections; import java.util.List; public class SortToBufferedReader { public static void main(String[] args) { List<Double> dataList = new ArrayList<>(); String filePath = "你的文件路径.csv"; try (BufferedReader br = new BufferedReader(new FileReader(filePath))) { String line; while ((line = br.readLine()) != null) { double num = Double.parseDouble(line.trim()); dataList.add(num); } // 排序数值 Collections.sort(dataList); // 把排序后的数值拼接成换行分隔的字符串 StringBuilder sb = new StringBuilder(); for (Double num : dataList) { sb.append(num).append("\n"); } String sortedText = sb.toString(); // 把字符串转换成BufferedReader try (BufferedReader sortedBr = new BufferedReader(new StringReader(sortedText))) { String sortedLine; // 现在就可以像读普通文件一样读取排序后的数据了 while ((sortedLine = sortedBr.readLine()) != null) { double num = Double.parseDouble(sortedLine); System.out.println("从BufferedReader读取排序后的值:" + num); } } } catch (IOException e) { e.printStackTrace(); } catch (NumberFormatException e) { System.out.println("文件内容格式不对,请检查!"); e.printStackTrace(); } } }
给你的小提醒
- 之前用String数组排序会出问题,是因为字符串排序是按字典序来的,比如
"100"会排在"20"前面,这不是你要的数值排序!所以一定要先转成double类型再排序哦。 - 如果读的是真正的
.xlsx文件(不是CSV),那BufferedReader根本读不了,得用专门的Excel处理库(比如Apache POI),但这个对新手有点复杂,还是建议把Excel另存为CSV格式更简单。
内容的提问来源于stack exchange,提问作者Quivils
相关产品推荐
相关产品推荐

