代码后续上来,就是我用递归扫了一边个人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
提交
取消