文件操作 - 图1

为方便处理数据:
高级语言-数据类型;
文件-文件类型(扩展名):文本文件;二进制文件

获取资源文件的两种方式

获取资源文件方式 path写法 菜鸟雷区
Class.getResource(String path) path以/开头:则是从ClassPath根下获取
path不以/开头:默认是从此类所在的包下取资源
需要用类名获取,否则报空指针异常
ClassLoader.getResource(String path) ClassLoader.getResource的path中不能以/开头,path是默认是从根目录下进行读取的

Excel文件操作

Excel文件主要两种格式:.xls.xlsx(Office2007以后的格式)

封装方法

引入依赖

  1. <!--读取Excel(xlsx扩展名)格式文件-->
  2. <dependency>
  3. <groupId>org.apache.poi</groupId>
  4. <artifactId>poi-ooxml</artifactId>
  5. <version>5.2.2</version>
  6. </dependency>

保存对象列表到.xlsx文件

  1. //保存对象列表->.xlsx文件
  2. public static String writeExcel(List<CodeMap> list,String path) throws IOException {
  3. Workbook wb = new XSSFWorkbook();
  4. Sheet sheet = wb.createSheet();
  5. for (int i=0;i<list.size();i++){
  6. CodeMap codeMap = list.get(i);
  7. Row row = sheet.createRow(i);
  8. row.createCell(0).setCellValue(codeMap.getCityName());
  9. row.createCell(1).setCellValue(codeMap.getAdcode());
  10. row.createCell(2).setCellValue(codeMap.getCitycode());
  11. }
  12. FileOutputStream fos = new FileOutputStream(path);
  13. wb.write(fos);
  14. //关闭资源
  15. fos.close();
  16. wb.close();
  17. return "writeExcel success!!";
  18. }

读取Excel文件

  1. //读取Excel文件->对象列表
  2. public static List<CodeMap> readExcel(String path) throws IOException, InvalidFormatException {
  3. //Workbook对应一个Excel文件对象
  4. //XSSFWorkbook对应 .xlsx格式
  5. Workbook wb = new XSSFWorkbook(new File(path));
  6. List<CodeMap> list = new ArrayList<>();
  7. //sheet表示一个工作表
  8. for (Sheet sheet : wb) {
  9. //Row表示一行
  10. for (Row row : sheet) {
  11. //Cell表示一个单元格
  12. String cityName = row.getCell(0).getStringCellValue();
  13. String adcode = row.getCell(1).getStringCellValue();
  14. //citycode有空指针异常
  15. String citycode = row.getCell(2, Row.MissingCellPolicy.CREATE_NULL_AS_BLANK).getStringCellValue();
  16. list.add(new CodeMap(cityName, adcode, citycode));
  17. }
  18. }
  19. wb.close();
  20. return list;
  21. }

bug解决

  1. bug:读取 空的单元格时 会报NullPointerException
  2. 解决方法:Row.MissingCellPolicy.CREATE_NULL_AS_BLANK

参考

  1. 书籍:(Java编程的逻辑).文件
  2. Java中处理Excel文件及其他微软文档广泛使用POI类库

    JSON文件操作

    JSON文件就是存放JSONString

    封装方法

    引入依赖

    1. <!-- fastjson坐标,处理json -->
    2. <dependency>
    3. <groupId>com.alibaba</groupId>
    4. <artifactId>fastjson</artifactId>
    5. <version>1.2.79</version>
    6. </dependency>

    写jsonString->json文件

    1. //写入JSON文件
    2. public static String writeJson(String jsonString,String filePath){
    3. BufferedWriter br = null;
    4. try {
    5. br = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(filePath,false), StandardCharsets.UTF_8));
    6. br.write(jsonString);
    7. } catch (IOException e) {
    8. e.printStackTrace();
    9. } finally {
    10. if (br!=null){
    11. try {
    12. br.close();
    13. } catch (IOException e) {
    14. e.printStackTrace();
    15. }
    16. }
    17. }
    18. return "writeJson success!!";
    19. }

    读json文件->String

    1. 读取json文件
    2. public static String readJson(String filePath){
    3. BufferedReader br = null;
    4. //StringBuilder用于拼接字符串
    5. StringBuilder jsonString = new StringBuilder();
    6. try {
    7. FileInputStream fis = new FileInputStream(filePath);
    8. br = new BufferedReader(new InputStreamReader(fis, StandardCharsets.UTF_8));
    9. String temp ;
    10. while((temp = br.readLine())!=null){
    11. jsonString.append(temp);
    12. }
    13. } catch (IOException e) {
    14. e.printStackTrace();
    15. } finally {
    16. if (br!=null){
    17. try {
    18. br.close();
    19. } catch (IOException e) {
    20. e.printStackTrace();
    21. }
    22. }
    23. }
    24. return String.valueOf(jsonString);
    25. }