Java 复制文件 (文件输入输出流)

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;

public class CopyFileDemo {

    public static void main(String[] args) {
        copyFile("c:\\a.txt","d:\\b.txt");
    }

    private static final int OUTPUT_FILE_BUFFER_SIZE = 4*1024;

    private static boolean copyFile(String srcdir,String desdir){
        //文件流
        FileInputStream fileInputStream = null;
        FileOutputStream fileOutputStream = null;

        //使用缓存
        BufferedInputStream bis;
        BufferedOutputStream bos;

        //每次读取的长度
        int readLength = 0;

        //当前位置
        int position = 0;

        //打印信息
        System.out.println("copyFile srcdir: " + srcdir + " desdir:" + desdir);
        //目标文件
        File disFileInfo = null;
        //源文件信息
        File fileInfo = new File(srcdir);
        if(!fileInfo.exists()){
            System.out.println("源文件不存在 返回false");
            return false;
        }

        //定义缓存大小
        byte[] buffer  = new byte[OUTPUT_FILE_BUFFER_SIZE];
        try {
            fileInputStream = new FileInputStream(fileInfo);
        } catch (FileNotFoundException e) {
            e.printStackTrace();
            return false;
        }
        //缓冲的输入流
        bis = new BufferedInputStream(fileInputStream, 0x4000);

        //检测目标文件是否存在 创建文件
        disFileInfo = new File(desdir);
        if(!disFileInfo.exists()){
            try {
                disFileInfo.createNewFile();
            } catch (IOException e) {
                e.printStackTrace();
                return false;
            }
        }

        try {
            fileOutputStream = new FileOutputStream(disFileInfo);
        } catch (FileNotFoundException e) {
            e.printStackTrace();
            return false;
        }
        //缓冲的输出流
        bos = new BufferedOutputStream(fileOutputStream, 0x10000);

        while(position != fileInfo.length())
        {
            if(position != fileInfo.length()){
                try {
                    //{@
                    /*核心代码*/
                    //从此字节输入流中给定偏移量处开始将各字节读取到指定的 byte数组中buffer
                    readLength = bis.read(buffer, 0, OUTPUT_FILE_BUFFER_SIZE);
                    //将指定 byte数组buffer中从偏移量 off开始的 len个字节写入此缓冲的输出流
                    bos.write(buffer, 0, readLength);
                    position += readLength;
                    //@}
                } catch (IOException e) {
                    e.printStackTrace();
                    return false;
                }
            }
        }

        //依次关闭流
        if(bis != null){
            try {
                bis.close();
            } catch (IOException e) {
                e.printStackTrace();
                return false;
            }
        }

        if(bos != null){
            try {
                bos.close();
            } catch (IOException e) {
                e.printStackTrace();
                return false;
            }
        }

        if(position == fileInfo.length()){
            System.out.println("copyFile success !!");
            return true;
        }

        return false;
    }
}
时间: 2024-08-04 07:12:55

Java 复制文件 (文件输入输出流)的相关文章

JAVA文件读写输入输出流关闭问题、JAVA垃圾回收

切记: 读写文件一定要及时关闭输入输出流 项目中,用到将rtf文档上传后修改一个更新标记为0未更新,另外一个程序将文档上传到LED屏上面,LED程序检测到更新标记为未更新时将状态投到LED上面,并将状态更新为1已更新. 现象:上传文件时使用输入输出流,上传成功后LED屏不显示更新文档,为空. 部分代码: public void save(){ upload(); save(XXXXX); } public void upload() throws Exception{ //以服务器的文件保存地址

java I/O系统(输入输出流)

java I/O系统(输入输出流) 流的特性1.含有流质(数据)2.它有方向(读或写) 流的分类: 输入流和输出流 输入流:io包中的输入流继承自抽象类InputStream或Reader 输出流:io包中的输入流继承自抽象类OutputStream或Writer 字节流和字符流 注:1字节代表1个英文单词存储的数据大小,一个汉字占两字节 1.字节流:以byte为最小单位传送,继承自抽象类InputStream或OutputStream,用于处理二进制文件,InputStream为读取字节流的父

java中常见的输入输出流案例学习

字节输入流: 1.FileInputStream 用途:从文件系统中的文件获得输入字节,常用于读取图像.声音等原始字节流,读取字符流可考虑使用FileReader 详细构造函数与常用方法可参考API文档,网上已经有中文版的API了,我是个E文盲,伤不起 这里介绍一个最常见的方法: read(byte[] b, int off, int len) 从此输入流中将最多 len 个字节的数据读入一个 byte 数组中. ->off:b字节数组中的偏移量 小知识:数组偏移量,比如a[1,2,3,4,5]

java之九 基本输入输出流

流的概念 Java程序通过流来完成输入/输出.流是生产或消费信息的抽象.流通过Java的输入/输出系统与物理设备链接.尽管与它们链接的物理设备不尽相同,所有流的行为具有同样的方式.这样,相同的输入/输出类和方法适用于所有类型的外部设备.这意味着一个输入流能够抽象多种不同类型的输入:从磁盘文件,从键盘或从网络套接字.同样,一个输出流可以输出到控制台,磁盘文件或相连的网络.流是处理输入/输出的一个洁净的方法,例如它不需要代码理解键盘和网络的不同. Java中流的实现是在java.io包定义的类层次结

文件及输入输出流模拟ATM机

题目:两部分要求都要实现. 一.ATM机的账户记录Account有账户的唯一性标识(11个长度的字符和数字的组合),用户的姓名,操作日期(Date),操作类型,账户密码(六位的数字,可以用0开头),当前的余额(可以为0). 模拟ATM的功能设计,用户插卡后显示选择语言界面,输入密码界面,用户输入正确密码(用户输入错误密码,则提示该卡已被锁定,无法操作),则弹出选择界面:存款.取款.转账汇款.修改密码.查询余额. 选择"取款",则显示100元.500元.1000元.1500元.2000元

Java——复制txt文件

将源文件复制到目标文件,同时输出源文件内容,需要提供一个源文件和目标文件路径参数(如果不存在则自动创建) public static void copyTxt(String sourceFile, String targetFile){ try{ String encoding = "GBK"; File file = new File(sourceFile); if(file.exists() && file.isFile()){ //判断文件是否存在 FileInp

java 复制txt文件

package com.file; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.Inp

Android(java)学习笔记167:Java中操作文件的类介绍

1.File类:对硬盘上的文件和目录进行操作的类.    File类是文件和目录路径名抽象表现形式  构造函数:        1) File(String pathname)       Creates a new File instance by converting the given pathname string into an abstract pathname. 2)File(File parent, String child)       Creates a new File i

【ThinkingInC++】72、输入输出流

第四章 输入输出流 Strfiile.cpp /** * 书本:[ThinkingInC++] * 功能:一个文件的输入输出流 * 时间:2014年10月12日15:15:59 * 作者:cutter_point */ #include <iostream> //很多平台上<fstream>会自动包含<iostream>但是不是所有 #include <fstream> #include "../require.h" using name

【Java】利用文件输入输出流完成把一个文件夹内的所有文件拷贝的另一的文件夹的操作

一.基本目标 使用Java完成如下的操作: 把一个文件夹内的所有文件拷贝的另一的文件夹,例如,在F盘中有a与b两个文件夹: f:/a里面有一堆文件,运行Java程序之后就会全部复制到f:/b,并且完成重命名,在所有文件之前加rename_的前缀,如果里面有文件夹,则文件夹不重命名,里面的文件进行重命名,同样在所有文件之前加rename_的前缀: 二.制作过程 1.首先主函数非常简单,就是调用了上面FileTest类中的copyFolder函数 public class FileCopy { pu