如飄雪般寂靜如深海般沉甸
2017-01-16 23:09:38
代碼后續上來,就是我用遞歸掃了一邊個人U盤,然后打算把掃到的東西放進一個新建的文件夾,不知道為什么老報錯。請大佬指教!代碼:
import?java.io.File;
import?java.io.FileOutputStream;
import?java.util.ArrayList;
public?class?File1?{
????public?static?void?main(String[]?args)?throws?Exception?{
//創建File對象。傳入路徑
????????File?f?=?new?File("G:\\");
????????try?{
????????????showfile(f);//調用靜態showfile方法
????????}?catch?(Exception?e)?{
????????????e.printStackTrace();
????????}
????????System.out.println("長度為:"?+?f.length());
//????????System.out.println("路徑:"+f.getPath());
//????????System.out.println("父路徑:"+f.getParentFile());
????}
????public?static?void?showfile(File?f)?throws?Exception?{
????????//判斷目錄是否為空
????????if?(f?!=?null)?{
????????????//打印目錄名
????????????System.out.println(f.getName());
????????????//判斷是否為目錄
????????????if?(f.isDirectory())?{
????????????????File?fs1;//定義fs1變量
????????????????File[]?fs?=?f.listFiles();//fs數組接收
????????????????if?(fs?!=?null)?{//判斷目錄是否為空
????????????????????for?(int?i?=?0;?i?<?fs.length;?i++)?{
????????????????????????fs1?=?fs[i];//接收遞歸后數據
????????????????????????showfile(fs1);//傳入showfile方法
//定義集合
????????????????????????ArrayList<File>?al?=?new?ArrayList<File>();
????????????????????????//把遞歸掃到的數據丟進集合
????????????????????????al.add(fs1);
????????????????????????//創建新建目錄路徑
????????????????????????File?ar?=?new?File("G:\\TestAR");
????????????????????????//創建目錄
????????????????????????ar.mkdir();
????????????????????????//創建輸出流
????????????????????????FileOutputStream?out?=?null;
????????????????????????try?{
????????????????????????????//創建輸出路徑
????????????????????????????out?=?new?FileOutputStream("G:\\TestAR");
//創建準備輸出的代碼
????????????????????????????File?fs2?=?fs1;
????????????????????????????byte?bs[]?=?fs2.listFiles();
????????????????????????????out.write(bs,?0,?60000);
????????????????????????????System.out.println("Test");
????????????????????????}?catch?(Exception?e)?finally?{
????????????????????????????if?(ar?!=?null)?{
????????????????????????????????out.close();
????????????????????????????}
????????????????????????}
????????????????????}
????????????????}
????????????}
????????}
????}
}
3 回答


風洛洛
TA貢獻11條經驗 獲得超2個贊
import?java.io.File; import?java.io.FileInputStream; import?java.io.FileOutputStream; import?java.util.ArrayList; public?class?File1?{ ????public?static?void?main(String[]?args)?throws?Exception?{ //創建File對象。傳入路徑 ????????File?f?=?new?File("E:\\test"); ????????try?{ ????????????showfile(f);//調用靜態showfile方法 ????????}?catch?(Exception?e)?{ ????????????e.printStackTrace(); ????????} ????????System.out.println("長度為:"?+?f.length()); //????????System.out.println("路徑:"+f.getPath()); //????????System.out.println("父路徑:"+f.getParentFile()); ????} ????public?static?void?showfile(File?f)?throws?Exception?{ ????????//判斷目錄是否為空 ????????//你要想連目錄都要遍歷,那必須得去除掉之前的根路徑,再在新的路徑下創建?,?我簡單做處理 ????????if?(f?!=?null)?{ ????????????//打印目錄名 ????????????System.out.println(f.getAbsolutePath()); ????????????//判斷是否為目錄 ????????????if?(f.isDirectory())?{ ????????????????File?fs1;//定義fs1變量 ????????????????File[]?fs?=?f.listFiles();//fs數組接收 ????????????????if?(fs?!=?null)?{//判斷目錄是否為空 ????????????????????for?(int?i?=?0;?i?<?fs.length;?i++)?{ ????????????????????????fs1?=?fs[i];//接收遞歸后數據 ????????????????????????showfile(fs1);//傳入showfile方法 ????????????????????????//定義集合 ????????????????????????//你的這個集合完全沒有意義 ????????????????????????ArrayList<File>?al?=?new?ArrayList<File>(); ????????????????????????//把遞歸掃到的數據丟進集合 ????????????????????????al.add(fs1); ????????????????????????//創建新建目錄路徑 ????????????????????????File?ar?=?new?File("E:\\TestAR"); ????????????????????????//這里你應該先判斷下,目錄是否存在 ????????????????????????if(!ar.exists()){ ????????????????????????????//不存在??創建目錄 ????????????????????????????ar.mkdir(); ????????????????????????} ????????????????????????//得先判斷?文件是否是目錄,是目錄直接在新的目錄下創建目錄就行 ????????????????????????if(fs1.isDirectory()){ ????????????????????????????File?newDir?=?new?File("E:\\TestAR\\"+fs1.getAbsolutePath().substring("E:\\test".length())); ????????????????????????????if(!newDir.exists()){ ????????????????????????????????newDir.mkdir(); ????????????????????????????} ????????????????????????}else{ ????????????????????????????//如果他的根路徑不存在?,?先創建目錄 ????????????????????????????String?dirStr?=?"E:\\TestAR\\"+fs1.getAbsolutePath().substring("E:\\test".length()); ????????????????????????????dirStr?=?dirStr.substring(0,dirStr.length()?-?fs1.getName().length()); ????????????????????????????File?dir?=?new?File(dirStr); ????????????????????????????if(!dir.exists()){ ????????????????????????????????dir.mkdir(); ????????????????????????????} ????????????????????????????//先創建文件 ????????????????????????????File?file?=?new?File("E:\\TestAR\\"+fs1.getAbsolutePath().substring("E:\\test".length())); ????????????????????????????if(!file.exists()){ ????????????????????????????????file.createNewFile(); ????????????????????????????} ????????????????????????????//創建輸出流 ????????????????????????????FileOutputStream?out?=?null; ????????????????????????????FileInputStream?in?=?null; ????????????????????????????try?{ ????????????????????????????????//創建輸出路徑 ????????????????????????????????out?=?new?FileOutputStream(file); ????????????????????????????????//創建準備輸出的代碼 ????????????????????????????????File?fs2?=?fs1; ????????????????????????????????//這里的 ????????????????????????????????in?=?new?FileInputStream(fs2); ????????????????????????????????//沒理解你這里要干嘛。。。 //????????????????????????????File?bs[]?=?fs2.listFiles(); ????????????????????????????????byte[]?bs?=?new?byte[2048]; ????????????????????????????????while(in.read(bs)!=-1){ ????????????????????????????????????out.write(bs); ????????????????????????????????????bs?=?new?byte[2048]; ????????????????????????????????} //????????????????????????????out.write(bs,?0,?60000); //????????????????????????????System.out.println("Test"); ????????????????????????????}?catch?(Exception?e){ ????????????????????????????????//這里之前少這塊?,?先直接堆棧打出來吧 ????????????????????????????????e.printStackTrace(); ????????????????????????????}finally?{ //????????????????????????????這里應該判斷流是否存在?并關閉 //????????????????????????????if?(ar?!=?null)?{ ????????????????????????????????if(out!=null){ ????????????????????????????????????out.close(); ????????????????????????????????} ????????????????????????????????if(in!=null){ ????????????????????????????????????in.close(); ????????????????????????????????} ????????????????????????????} ????????????????????????} ????????????????????} ????????????????} ????????????} ????????} ????} }
這里 多說兩句。。。 我這是在你那原基礎上改的。。。所以有點亂,怕重新設計了你又看不懂了。
這里給點建議:
名字起得有意義些,我改的時候感覺根本不知道命名是什么意思
寫代碼最起碼編譯得過,而且,設計時考慮全面些= =你之前代碼沒有考慮文件夾里面有文件夾怎么辦
建議你再看下io那里
添加回答
舉報
0/150
提交
取消