• java中递归实现复制多级文件夹


    常见的流的用法

    递归实现复制多级文件夹

    FileInputStream & FileOutputStream

    String content = null;//用来储存解码后的byte数组
    int size=0;//用来存储每次从文件读取的字节数
    byte[] buffer = new byte[1024];//用作读进程序与从程序写出的媒介
    FileInputStream r = new FileInputStream("D:\table.sql");//读取文件
    FileOutputStream w = new FileOutputStream("kk.sql");
    //每次从文件读取字节数为buffer的长度,读到尽头返回-1
    while( (size=r.read(buffer)) !=-1){
        //把size容量的buffer转为字符串
        content=new String(buffer,0,size);
        System.out.println(content);
        //将buffer内容写入
        w.write(buffer);
    }
    r.close();
    w.close();
    

    BufferReader & BufferWriter

    据说缓冲流是利用将读到的数据先放在一个地方,然后一次性写入内存而不是读一个写一个。
    但是这个地方是什么呢?如果是数组,那么和FileInputStream好像没什么区别

    BufferedReader bufferedReader = new BufferedReader(new FileReader("D:\table.sql"));
    BufferedWriter bufferedWriter = new BufferedWriter(new FileWriter("ke.sql"));
    String string = "";
    while((string=bufferedReader.readLine())!=null){
        System.out.println(string);
        bufferedWriter.write(string+"
    ");
    }
    bufferedReader.close();
    bufferedWriter.flush();
    bufferedWriter.close();
    

    递归实现复制多级文件夹

    必须知道的几个方法:

    • isDirectory()判断文件是否是文件夹
    • mkdirs()在指定位置创建文件夹可以创建多级目录
    • mkdir()只能在本目录下创建文件夹
    • getAbsolutePath()返回绝对路径
    • getName()返回此文件的名字
    • listFiles()返回此文件下的所有文件

    思想很简单,如果是文件则复制,如果是文件夹则先复制文件夹再递归一下源文件夹下的所有文件,关键是用好getAbsolutePath(),getName()这两个方法。

    public class NotAnonymous{
    	public void copy(String src,String dest) throws IOException{
    		BufferedReader bufferedReader = new BufferedReader(new FileReader(src));
    		BufferedWriter bufferedWriter = new BufferedWriter(new FileWriter(dest));
    		String string = null;
    		while((string = bufferedReader.readLine())!=null){
    			bufferedWriter.write(string);
    		}
    		bufferedWriter.flush();
    		bufferedReader.close();
    		bufferedWriter.close();
    	}
    	public void copyFolder(String src,String dest) throws IOException{
    		File startFoler = new File(src);
    		if (startFoler.isDirectory()) {
    			File kFile = new File(dest+"/"+startFoler.getName());
    			kFile.mkdirs();
    			File[] files = startFoler.listFiles();
    			for (File file : files) {
    				copyFolder(file.getAbsolutePath(), kFile.getAbsolutePath());
    			}
    		}else {
    			copy(src, dest+"/"+startFoler.getName());
    		}
    	}
    	public static void main(String[] args) throws IOException {
    		NotAnonymous notAnonymous = new NotAnonymous();
    		notAnonymous.copyFolder("E:/test", "F:/hello");
    	}
    }
    
  • 相关阅读:
    ASP.NET编程的十大技巧
    C#学习心得(转)
    POJ 1177 Picture (线段树)
    POJ 3067 Japan (树状数组)
    POJ 2828 Buy Tickets (线段树)
    POJ 1195 Mobile phones (二维树状数组)
    HDU 4235 Flowers (线段树)
    POJ 2886 Who Gets the Most Candies? (线段树)
    POJ 2418 Cows (树状数组)
    HDU 4339 Query (线段树)
  • 原文地址:https://www.cnblogs.com/bihanghang/p/9958068.html
Copyright © 2020-2023  润新知