萌新向各位请教一个很基础的问题

代码后续上来,就是我用递归扫了一边个人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();
                            }
                        }
                    }
                }
            }
        }
    }
}
如飘雪般寂静如深海般沉甸
浏览 1451回答 3
3回答

慕的地8582982

CHOZMWYYXRBIKBLEUMSSVQWZAUKUHOHHILLLFLBRNIBLQSBLYSMNAANLHEHAKDONKXDMTKKQMDMJCKADEQHXNWJTZCCLCMFSLRBVGVKGJPFOFCADGPGVVZOBLXRBHHISPPVTNNRANHXDNBVCVUXQAEOBSIOMSYKUOBUKBVFFIFSZJCPCRYYMZPVSVCLWATTGHHNKXHPIYPISARDAHJVVYBBJPIIFFRSLPPFWLLYQGBSSFQTFMCQWJNAUXVGTZSHHLEOSVEBAIVBOSVFYKSQIELORKKKICWYUYANHRANKNLXOYFDUDWQMJERHUURVIMWNBRAQKKNQXRTPLZFLIOOHUQDZTXWMCJYYZIFIROQGJZCNDSOEIDNCRGTBEZIFBSBEORZJLPMVRNDNSULOEAXZPSUEACZBRIEHXGQLWYWEADGVSPEUYOEHDGJZUDTQSOEAJTVENWZPZILTIGLPXIXNKZPMWJSUQTVKUXTDTXGQTQSOLHPGPZWFHDMCTJCYURBFOQTCZTPYVXTCMPFUAQSPEUDZAEVFHEIEOJZCYWXACZISOXLULCSAPSODACMPKGCKGCYIXVRAWZVLORTDGVIKGEUEIRGJMWSJZCSIXTWTVEGDZIZIEBXDYPZDZWFBKHJZILCGQTCYCPLHRHPSBDUEFBDTCSVRAXNQAVTWYVYNQGUEOXNDFCEARLOKODTQZJADXGVRHENQZPFLUKNCFPMVDGKNIGPNDZOYIWGTEUENENQGBKMUQGWGVSILHWTIYVMBYUEHHHVVUPKUUBVIOYISVVVFEDNXAKADJXFFOBPMWDKTWJRTTMNNJPWDGWJBBYYOUNPPZVFWZJKAZWMOOMVOIIJCXQCQZZFITNZGNLRTKXAVEUHH

风洛洛

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那里

风洛洛

额,你这个代码 编译期错误都没处理掉吧。。。建议最起码编译先过了
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java