读取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());
将首字符删除,将解决出现问题