亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

萌新向各位請教一個很基礎的問題

萌新向各位請教一個很基礎的問題

代碼后續上來,就是我用遞歸掃了一邊個人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();
????????????????????????????????}
????????????????????????????}
????????????????????????}


????????????????????}
????????????????}
????????????}
????????}
????}
}

這里 多說兩句。。。 我這是在你那原基礎上改的。。。所以有點亂,怕重新設計了你又看不懂了。

這里給點建議:

  1. 名字起得有意義些,我改的時候感覺根本不知道命名是什么意思

  2. 寫代碼最起碼編譯得過,而且,設計時考慮全面些= =你之前代碼沒有考慮文件夾里面有文件夾怎么辦

  3. 建議你再看下io那里

查看完整回答
反對 回復 2017-01-17
?
風洛洛

TA貢獻11條經驗 獲得超2個贊

額,你這個代碼 編譯期錯誤都沒處理掉吧。。。建議最起碼編譯先過了

查看完整回答
反對 回復 2017-01-17
  • 3 回答
  • 0 關注
  • 1539 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號