关于IO编程真实笔试面试题

1.面试题目:
1、业务需求
现有一些从不同网站采集下来的网络资源,需要在网站进行统一展示,但由于内容和格式不一致,所以导入数据库时比较麻烦,现需要将这些资源加工处理成统一格式,方便导入数据库。
2、实现要求
1)文件命名
a)原文件名中带有”-“的,需截取”-“后面的内容作为新的文件名,不带”-“的则保留原文件名。
b)显示新文件夹下的所有文档的行数。
2)文件编码
所有输出文件统一编码为GBK。
3)文件内容
a)去掉所有以”<#”开头的内容(一整行)。
b)去掉文档中的所有空行。
3、提交要求
1)提交可执行的java代码。
2)生成以下效果的文件目录。
源文件
在这里插入图片描述目标结果:
在这里插入图片描述JAVA源码解答:
package com.navinfo.aerozh.ni.serverStation.assembler;

import java.io.;
import java.util.
;

/**

  • @Author: luyao

  • @Description:

  • @Date: Created in 2019/7/19 11:24

  • @Modified By:
    /
    public class Demo
    {
    /
    *

    • 用来保存文件的绝对路径的list
      /
      static LinkedList Filelist = new LinkedList();
      /
      *
    • 用于记录每个文件夹下文件的行数
      */
      static Map<String, Integer> lineMap = new HashMap<String, Integer>(16);

    /**

    • 读取文件夹下的所有文件并获取文件的绝对路径
    • @param path
      */
      public static void readFilesDir(String path)
      {
      //文件夹
      LinkedList Dirlist = new LinkedList();
      File dir = new File(path);
      File[] files = dir.listFiles();
      if(files.length > 0)
      {
      for (File file : files)
      {
      //判断是否为文件夹
      if (file.isDirectory())
      {
      Dirlist.add(file);
      } else
      {
      //将文件绝对路径放到list中
      Filelist.add(file.getAbsolutePath());
      System.out.println(file.getAbsolutePath());
      }
      }
      }else{
      System.out.println(“指定文件夹下没有任何数据!!!”);
      }
      }

    /**

    • 读取单个文件的内容
    • @param file
    • @return 文件的内容,String
      */
      public static String readContents(File file, String mirLocal)
      {
      StringBuilder res = new StringBuilder();
      BufferedReader br = null;
      try
      {
      InputStreamReader isr = new InputStreamReader(new FileInputStream(file), “GBK”);
      br = new BufferedReader(isr);
      int i = 0;
      while (br.ready())
      {
      String lineContent = br.readLine();
      //去掉已"<#“开的和空行的行
      if (!lineContent.startsWith(”<#") && !lineContent.equals(""))
      {
      System.out.println(lineContent);
      i++;
      res.append(lineContent + “\n”);
      }
      }
      if (!"".equals(mirLocal))
      {
      int lineNum =
      lineMap.get(mirLocal) == null ? 0 : Integer.parseInt(lineMap.get(mirLocal).toString());
      lineMap.put(mirLocal, lineNum + i);
      }
      br.close();
      } catch (Exception e)
      {
      e.printStackTrace();
      }
      return res.toString();
      }

    /**

    • 保存文件
      */
      public static void saveFiles(String contents, String output, String mirLocal, String nameFile)
      {
      File file = new File(output + “//” + mirLocal);
      //判断文件是否存在,不存在就创建出来
      if (!file.exists())
      {
      file.mkdirs();//mkdirs用于创建文件夹
      }
      File outputFile = new File(output + “//” + mirLocal + “//” + nameFile);
      try
      {
      if (!outputFile.exists())
      {
      outputFile.createNewFile();
      BufferedWriter bw = new BufferedWriter(new FileWriter(outputFile, true));
      bw.write(contents);
      bw.flush();
      bw.close();
      }
      } catch (Exception e)
      {
      e.printStackTrace();
      }
      System.out.println(“保存成功!!!”);
      }

    /**

    • 合并
      */
      public static void mergeFiles(List files, String output)
      {
      if (files == null)
      {
      System.out.println(“Error:文件list为空”);
      }
      for (String filepath : files)
      {
      if (filepath.contains("-"))
      {
      String name = filepath.split("-")[1];
      String nameFile = filepath.split("-")[0];
      //文件夹名称
      String mirLocal = nameFile.substring(nameFile.lastIndexOf("\") + 1);
      int lineNum = lineMap.get(mirLocal) == null ? 0 : Integer.parseInt(lineMap.get(mirLocal).toString());
      lineMap.put(mirLocal, lineNum);
      String contents = readContents(new File(filepath), mirLocal);
      saveFiles(contents, output, mirLocal, name);
      } else
      {
      String name = filepath.substring(filepath.lastIndexOf("\") + 1);
      String contents = readContents(new File(filepath), “”);
      saveFiles(contents, output, “”, name);
      }
      }
      System.out.println(“合并完成”);
      }

    /**

    • 修改文件夹名称
      */
      public static void mergeFiles(String out)
      {
      for (String key : lineMap.keySet())
      {
      File file = new File(out + “\” + key);
      file.renameTo(new File(out + “\” + key + “(” + lineMap.get(key) + “)”));
      }
      }

    public static void main(String[] args)
    {
    /**
    * 目标文件夹数据,请修改指定文件夹路径
    /
    String path = “C:\Users\lenovo\Desktop\技术人员考核题目(7)\考核题目”;
    /
    *
    * 生成文件路径
    /
    String out = “D:/test”;
    /
    *
    * 文件不存在,直接新建
    /
    File file = new File(out);
    if (!file.exists())
    {
    file.mkdirs();
    }
    /
    *
    * 读取文件数据,绝对路径存储
    /
    readFilesDir(path);
    /
    *
    * 将文件内容经过筛选存到目标目录
    /
    mergeFiles(Filelist, out);
    /
    *
    * 修改文件夹名称
    */
    mergeFiles(out);
    }
    }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值