广

Java编程

  • IOS开发
  • android开发
  • PHP编程
  • JavaScript
  • ASP.NET
  • ASP编程
  • JSP编程
  • Java编程
  • 易语言
  • Ruby编程
  • Perl编程
  • AJAX
  • 正则表达式
  • C语言
  • 编程开发

    java对指定目录下文件读写操作介绍

    2018-11-01 10:51:35 次阅读 稿源:互联网
    零七广告
    最近因为项目的国际化的需要,需要对整个项目的100来个插件做国际化,这是一件痛苦的事情,因为纯体力劳动。为了省点工作量,想着能不能写个程序批处理了,减少点工作量,于是就有了下面的代码。
    1.读取指定的(.java)文件
    代码如下:

    public static String readFile(String path) throws IOException {
    File f = new File(path);
    StringBuffer res = new StringBuffer();
    String filePathStr = f.getPath();
    System.out.println("获取文件的路径:::::::"+filePathStr);
    FileInputStream fis = new FileInputStream(f);
    InputStreamReader isr = new InputStreamReader(fis,Charset.forName("GBK")); //以gbk编码打开文本文件
    BufferedReader br = new BufferedReader(isr, 8192 * 8);
    String line = null;
    int linenum = 0;
    while((line=br.readLine())!=null) {
    linenum ++;
    res.append(line+"此处可以添加你自己的字符串处理逻辑"+"/r/n");
    }
    br.close();
    return res.toString();
    }

    2.读取的文件内容信息写到指定的(.java)文件
    代码如下:

    public static boolean writeFile(String cont, String path) {
    try {
    File dist = new File(path);
    OutputStreamWriter writer = new OutputStreamWriter(new FileOutputStream(dist),"GBK");
    writer.write(cont);
    writer.flush();
    writer.close();
    return true;
    } catch (IOException e) {
    e.printStackTrace();
    return false;
    }
    }

    3.查找指定目录下所有符合条件的.java文件,并更新文件信息
    代码如下:

    /**
    * 查找文件
    * @param f
    * @throws IOException
    */
    public static void findFile(File f) throws IOException {
    if(f.exists()) {
    if(f.isDirectory()) {
    for(File fs:f.listFiles(ff)) {
    findFile(fs);
    }
    } else {
    updateFile(f);
    }
    }
    }
    /**
    * 逐行读java文件
    * @param f
    * @throws IOException
    */
    private static void updateFile(File f) throws IOException {
    String filePathStr = f.getPath();
    System.out.println("开始读取文件的路径:::::::"+filePathStr);
    FileInputStream fis = new FileInputStream(f);
    InputStreamReader isr = new InputStreamReader(fis,Charset.forName("GBK")); //以gbk编码打开文本文件
    BufferedReader br = new BufferedReader(isr, 8192 * 8);
    String line = null;
    int linenum = 0;
    StringBuffer res = new StringBuffer();
    while((line=br.readLine())!=null) {
    String updateStr= updateStr(line);
    res.append(updateStr+"/r/n");
    if(!line.trim().equals(updateStr.trim())) {
    linenum ++;
    }
    }
    br.close();
    //如果文件有修改,则修改后的文件,覆盖原有文件
    if(linenum>0) {
    System.out.println("=============================");
    System.out.println("filePathStr:"+filePathStr);
    System.out.println("文件修改了:"+linenum+"处。");
    System.out.println("=============================");
    String cont = res.toString();
    ReadWriteFile.write(cont, filePathStr);
    }
    }
    /**
    * 验证读取的字符串信息
    * 和更新字符串信息
    * @param str
    */
    private static String updateStr(String str) {
    //判断字符串是否是需要更新的字符串
    boolean isok = filterStr(str);
    int strNum = StringValidation.strNum(str, StringValidation.ch);
    if(isok || strNum == 0) {
    return str;
    } else {
    String temp = "";
    for(int i=1;i<=strNum/2;i++) {
    temp += " //$NON-NLS-"+i+"$"; //需要添加的字符
    }
    str = str+temp;
    }
    return str;
    }
    //过滤文件类型
    private static FileFilter ff = new FileFilter() {
    public boolean accept(File pathname) {
    String path = pathname.getName().toLowerCase();
    logger.info("FileFilter path::::"+path);
    //只匹配 .java 结尾的文件
    if (pathname.isDirectory() || path.endsWith(".java")) {
    return true;
    }
    return false;
    }
    };
    /**
    * 过滤掉不需要处理的字符串
    * @param str
    * @return
    */
    public static boolean filterStr(String str) {
    boolean isok = false;
    //过滤字符串
    isok = (str.indexOf("import ")>=0)
    || (str.indexOf("package ")>=0)
    || (str.indexOf(" class ")>=0)
    || (str.indexOf("//$NON-NLS")>=0)
    || (str.indexOf("//")==0)
    || (str.indexOf("/*")>=0)
    || (str.indexOf("*")>=0)
    || (str.trim().indexOf("@")==0)
    || (str.indexOf("/"")==-1)
    || ("".equals(str))
    || isCh(str);
    return isok;
    }
    /**
    * 验证字符串是否含有中文字符
    * @param str
    * @return
    */
    public static boolean isCh(String str) {
    Pattern pa = Pattern.compile("[/u4E00-/u9FA0]");
    Matcher m = pa.matcher(str);
    boolean isok = m.find();
    return isok;
    }

    总结:当我们拿到一个别人给的需求,先不要急于去处理,先分析,再分析,然后做出最优的解决方案,处理好这项工作。

    零七网部分新闻及文章转载自互联网,供读者交流和学习,若有涉及作者版权等问题请及时与我们联系,以便更正、删除或按规定办理。感谢所有提供资讯的网站,欢迎各类媒体与零七网进行文章共享合作。

    零七广告
    零七广告
    零七广告
    零七广告