关于读取txt文件并根据文件每行更改文件名,踩坑以及解决

读取txt文件每行内容​​​​

public Map<Integer, String> Txt(String filePath) {
        //将读出来的一行行数据使用Map存储
        Map<Integer, String> map = new HashMap<Integer, String>();
        try {
            File file = new File(filePath);
            int count = 0;//初始化 key值
            if (file.isFile() && file.exists()) {  //文件存在的前提
                InputStreamReader isr = null;
                try {
                    isr = new InputStreamReader(new FileInputStream(file), "utf-8");
                } catch (java.io.UnsupportedEncodingException e1) {
                    e1.printStackTrace();
                }
                BufferedReader br = new BufferedReader(isr);
                String lineTxt = null;
                while ((lineTxt = br.readLine()) != null) {  //
                    if (!"".equals(lineTxt)) {
//                        String reds = lineTxt.split("\\+")[0];  //java 正则表达式
                        String reds = lineTxt;
                        map.put(count, reds);//依次放到map 0,value0;1,value2
                        count++;
                    }
                }
                isr.close();
                br.close();
            }else {
                Toast.makeText(getApplicationContext(),"can not find file",Toast.LENGTH_SHORT).show();//找不到文件情况下
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return map;
    }

根据读出内容修改文件名

String []filename;
File []teamVideo;
int i=0;
private void ChangeFileName(File file){
    Map<Integer, String> map=orderByName(file.toString());
    File[] fs = file.listFiles();
    filename=new String[map.size()];
    teamVideo=new File[map.size()];
    for (int j=0;j<map.size();j++){
        if (map.get(j).endsWith(".mp4")){
            filename[i]=map.get(j);
            teamVideo[i] =new File(filename[i]);
            if (i==0){
                String start=Txt(IdrmsApplication.USBURL+ConstantConfig.BEIKE_TEAM_VIDEO_URL+"/videoname.txt").get(i);
                String start2 = start.substring(1, start.length());
                teamVideo[i].renameTo(new File(IdrmsApplication.USBURL+ConstantConfig.BEIKE_TEAM_VIDEO_URL+"/"+start2));
                i=i+1;
            }else {
            teamVideo[i].renameTo(new File(IdrmsApplication.USBURL+ConstantConfig.BEIKE_TEAM_VIDEO_URL+"/"+
                    Txt(IdrmsApplication.USBURL+ConstantConfig.BEIKE_TEAM_VIDEO_URL+"/videoname.txt").get(i)));
                i=i+1;
            }
        }
    }
}

因为如果是正常的file.listFiles();方法的话,是不保证所列出文件夹下所有文件名是按某种顺序排列的,因此重命名可能会出现命名文件不对应的状况。因此实现为listFile()后文件名按某种顺序排列,有以下实现排列方法:

public static Map<Integer, String> orderByName(String filePath) {
    File file = new File(filePath);
    File[] files = file.listFiles();
    List fileList = Arrays.asList(files);
    String lastfile;
    Map<Integer, String> map = new HashMap<Integer, String>();
    int count=0;
    Collections.sort(fileList, new Comparator<File>() {
        @Override
        public int compare(File o1, File o2) {
            if (o1.isDirectory() && o2.isFile())
                return -1;
            if (o1.isFile() && o2.isDirectory())
                return 1;
            return o1.getName().compareTo(o2.getName());
        }
    });
    for (File f : files) {
        lastfile=f.getAbsolutePath();
        map.put(count,lastfile);
        count++;
    }
    return map;
}

遇到的问题:如果你没有对读取txt内容进行隔离第一个字符的处理,将会出现后续打开文件时,文件名与代码不符合而报空或不存在此文件。

原因:windows下的txt文件会在首行第一个位置添加一个标识符用于辨别编码方式的,而我们是不可见的。但在程序运行读取后可能会出现看不见的单个字符或者”?“,

这时解决方法就如上面例子中的:

String start=Txt(IdrmsApplication.USBURL+ConstantConfig.BEIKE_TEAM_VIDEO_URL+"/videoname.txt").get(i);

String start2 = start.substring(1, start.length());

将首字符删除,将解决出现问题

猜你喜欢

转载自blog.csdn.net/ilovedogys/article/details/81670994