Java 文件的复制剪切

Java 文件的复制剪切:

read()

public abstract int read()
                  throws IOException

从输入流中读取数据的下一个字节。值字节int以 到 范围内的 形式0返回 255。如果由于到达流的末尾而没有可用的字节,-1则返回该值。此方法会一直阻塞,直到输入数据可用、检测到流结束或引发异常。
子类必须提供此方法的实现。
Returns:
数据的下一个字节(值),或者-1是否到达流的末尾。
Throws:
IOException- 如果发生 I/O 错误。

read(byte[] b)

public int read(byte[] b)
         throws IOException

从输入流中读取一些字节并将它们存储到缓冲区数组b中。实际读取的字节数以整数形式返回。在输入数据可用、检测到文件结尾或引发异常之前,此方法会一直阻塞。
如果 的长度b为零,则不读取任何字节并 0返回;否则,将尝试读取至少一个字节。如果由于流位于文件末尾而没有可用字节,-1则返回该值;否则,至少读取一个字节并将其存储到b.

读取的第一个字节存储在 elementb[0]中,下一个字节存储在b[1]中,依此类推。读取的字节数最多等于 的长度b。设k为实际读取的字节数;这些字节将 b[0]通过b[k-1]存储在元素中,使元素b[k]到 b[b.length-1]不受影响。

read(b)class的方法与以下InputStream 效果相同:

read(b, 0, b.length)
Parameters:
b- 读取数据的缓冲区。
Returns:
读入缓冲区的总字节数(个数),或者 -1由于已到达流的末尾而没有更多数据。
Throws:
IOException- 如果由于文件结尾以外的任何原因无法读取第一个字节,如果输入流已关闭,或者如果发生其他一些 I/O 错误。
NullPointerException- 如果b是null。

package three;

import java.io.*;

public class CopyCut {
    public static void main(String[] args) throws Exception {
        CopyCut CC=new CopyCut();
        File in=new File("F:\\2102\\day22\\a");
        BufferedReader reader=new BufferedReader(new InputStreamReader(System.in));
        System.out.println("请输入:1-复制 2-剪切");
        int n=Integer.parseInt(reader.readLine());
        if (n==1){
            File out=new File("F:\\2102\\day22\\a_副本");
            CC.copyDir(in,out);
            System.out.println("复制成功");
        }else {
            System.out.println("请输入以day22文件夹为根目录需要剪切的位置:");
            System.out.println("F:\\2102\\day22\\"+"?");
            String s=reader.readLine();
            File out=new File("F:\\2102\\day22\\"+s);
            CC.copyDir(in,out);
            deleteAll(in);
            System.out.println("剪切成功");
        }
    }

    private static void deleteAll(File in) {
        if (in.isDirectory()){
            File[]files=in.listFiles();
            if (files!=null&&files.length>0){
                for (File f:files
                     ) {
                    deleteAll(f);
                }
            }
        }
        in.delete();
    }

    public void copyDir(File fileIn,File fileOut) throws Exception{
        if (!fileOut.exists()){
            fileOut.mkdirs();
        }
        File[] listFiles = fileIn.listFiles();
        for (File f:listFiles
             ) {
            File fo=new File(fileOut.getAbsoluteFile()+File.separator+f.getName());
            if (f.isFile()){
                copyFile(f,fo);
            }else {
                copyDir(f,fo);
            }
        }
    }
    public void copyFile(File fileIn,File fileOut) throws Exception {
        InputStream is=new FileInputStream(fileIn);
        OutputStream os=new FileOutputStream(fileOut);
        int n;
        byte[]bytes=new byte[1024];
        while ((n=is.read(bytes))!=-1){
            os.write(bytes,0,n);
        }
        os.close();
        is.close();
    }
}

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值