java 批量更改CSV文件内容中指定位置的字符

  • Post author:
  • Post category:java


有104个一样格式的文件只是记录数不同

这里写图片描述

改为这个模式

这里写图片描述

把最后的2改为4

也就是2表示两条记录,4表示总的记录(包括第一行和最后一行)

@Test
    public void test4() throws Exception{
        String floderpath="D:\\input\\";
        /*String filename="ACS-4_GDC2_20171011_01.csv";
        String filepath=floderpath+filename;*/
        File floder=new File(floderpath);
        File [] files=null;
        try{
            if(!floder.isDirectory()){
                System.out.println("不存在");
            }
            files=floder.listFiles();
            System.out.println(files.toString());
            if(files.length==0){
                System.out.println("文件夹无文件");
            }
        }catch(Exception e){
            System.out.println("----------------");
        }


         for(int j=0;j<files.length;j++){
             File file=files[j];
             String filepath2=file.getPath();
         List list=getFilepathString(filepath2);

         try{
             isCorrentformat(list);

         int rowNom=  list.size();
        //   System.out.println(list.get(rowNom-1));
        String lastLine= list.get(rowNom-1).toString();
          // System.out.println(lastLine.charAt(2)); 

         int number= StringCharToNumber(lastLine,2);

          if(number!=list.size()){
          String rowNomStr=rowNom+"";
          StringBuilder sb=new StringBuilder(lastLine);
          sb.replace(2, 3, rowNomStr);//2 start 3 end not contains 2 ,contains 3
         // sb.replace(2, 3, list.size()+"");
          System.out.println(sb);
          System.out.println(list);

          list.remove(list.size()-1);
          list.add(sb);
          System.out.println(list);

        // File file=new File(filepath);
         file.delete();

         file.createNewFile();
          if(writeToFile(file,list)){
              System.out.println("success  ---------");
             }else{
              System.out.println("error ------");
             }
                               }
          else{
              System.out.println("文件不需要更改");
          }
            }catch(Exception e){
              System.out.println("file format correct !!!");
          }
         }
       }


    /**
     * 获取文件的内容
     * @param filepath
     * @return
     */
    public List getFilepathString(String filepath){
        BufferedReader br=null;
        List<String> list=null;
        try{
            list=new ArrayList<String>();
            br=new BufferedReader(new FileReader(filepath));
            String temp;
            while((temp=br.readLine())!=null){
                list.add(temp);
            }
        }catch(IOException e){
            System.out.println("getRowNum error ");
        }
        finally{
            if(null !=br){
                try{
                    br.close();
                }catch(IOException e){
                    System.out.println("br close error");
                }
            }
        }
        System.out.println("File's size:"+list.size());
        return list;
    }

    /**
     * 写入文件并换行
     * @param file
     * @param list
     * @return
     * @throws IOException
     */
    public boolean writeToFile(File file,List list) throws IOException{
        for(int i=0;i<list.size();i++){
            String s=list.get(i)+"\r\n";
            FileOutputStream fos=new FileOutputStream(file,true);
            PrintStream ps=new PrintStream(fos);
            System.out.println(s);

            ps.print(s);
            ps.close();
        }

        return true;
    }
    /*
     * 文件格式是否正确
     */
    public boolean isCorrentformat(List list){
        try{
            String str=list.get(list.size()-1)+"";
            if(StringCharToStr(str,0).equals("9")){
                return true;
            }

        }catch(Exception e){
            System.out.println("file format error");
        }

        return false;
    }
    /**
     * String 的某一个字符转换成Integer
     * @param c
     * @return Integer
     */
    public Integer StringCharToNumber(String s,int index){
         char c=s.charAt(index);
          char[] charArray = {c}; 
          String replaceStr=new String(charArray);

          int number =Integer.parseInt(replaceStr);
          System.out.println(number);
        return number;
    }
    /**
     * String 的某一个字符转换成String
     * @param c
     * @return Integer
     */
    public String StringCharToStr(String s,int index){
        char c=s.charAt(index);
        char[] charArray={c};
        String replaceStr=new String(charArray);
        return replaceStr;
    }

处理多个文件就需要先处理一个文件再通过遍历处理所有的文件

逻辑就是把一个文件的所有内容临时保存到List里面,每个list.get(i)就是文件的每一行数据,再删除原来的文件把文件名存到String里,然后把数据处理后通过File类新建一个文件再把List写入到新文件(每一行需要换行)



版权声明:本文为qq_33366229原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。