讀取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());
将首字元删除,将解決出現問題