Java实现文件的拷贝

前言

大多数应用程序都需要实现与设备之间的数据传输,例如键盘可以输入数据,显示器可以显示程序的运行结果等。在Java中,将这种通过不同输入输出设备(键盘,内存,显示器,网络等)之间的数据传输抽象表述为“流”,程序允许通过流的方式与输入输出设备进行数据传输。Java中的“流”都位于java.io包里,称为IO(输入输出)流


例如文件的拷贝就需要通过输入输出流来实现,以下案例可供参考

一、步骤

在eclipse中新建Java项目命名为FileCopy,并在当前目录下创建文件夹source和target,然后在source文件夹中存放一个文件。案例中我存放的是“Booty Music.mp3”文件。如下图:
Java文件放在default packet里了
下一步就开始写代码,新建class文件,类名File_copy

二、有关代码

1.导入使用到的包

代码如下:
在这里插入图片描述

2.文件的读取

创建一个字节输入流,用于读取当前目录下source文件夹中的mp3文件

InputStream in =new FileInputStream("source\\Booty Music.mp3");

3.数据的写入

创建一个文件字节输出流,用于将读取的数据写入target目录下的文件中

OutputStream out=new FileOutputStream("target\\booty music.mp3");

4.完整代码

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;

public class File_copy {
	public static void main(String[] args) throws Exception {
		InputStream in =new FileInputStream("source\\Booty Music.mp3");
		OutputStream out=new FileOutputStream("target\\booty music.mp3");
		int len;	//定义整型变量len,记住每次读取的一个字节
		long begintime=System.currentTimeMillis();	//获取拷贝文件前的系统时间
		while((len=in.read())!=-1) {	//读取一个字节,并判断是否读到文件末尾
			out.write(len);	//将读到的字节写入文件
		}
		long endtime=System.currentTimeMillis();	//获取文件拷贝结束时的系统时间
		System.out.println("文件拷贝所消耗的时间是:"+(endtime-begintime)+"毫秒");
		in.close();
		out.close();
	}
}

通过while()循环将字节逐个进行拷贝。每循环一次,就通过FileInputStream的read()方法读取一个字节,并通过FileOutputStream的write()方法将该字节写入指定文件,循环往复,直到len的值为-1,表示读到了文件的末尾,结束循环,完成文件的拷贝。

三、运行结果截图

如下图,程序拷贝mp3文件共消耗了132593毫秒。在拷贝文件时,由于计算机性能等各方面的原因,会导致拷贝文件所消耗的时间不确定,因此每次运行程序结果未必相同。
在这里插入图片描述
此时可以看到命令行窗口已经打印拷贝文件所消耗的时间,但target文件夹好像并没有拷贝到的文件,童鞋们不要着急,鼠标右键刷新(Refresh)或者直接点击键盘上的F5就可以显示出拷贝到的文件啦。
在这里插入图片描述在项目的路径中同样能找到拷贝的文件,如图
在这里插入图片描述

四、总结

需要注意的是,在定义文件路径时使用了\\。这是因为在Windows中的目录符号为反斜线\,但是反斜线\在Java中是特殊字符,表示转义符,所以在使用反斜线\时,前面应该再添加一个反斜线,即为\\。此外,目录符号也能用正斜线/表示,比如 source/Booty Music.mp3。

  • 6
    点赞
  • 49
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
Java文件夹复制(远程复制(网络传输),用于远程备份文件)(支持文件夹,嵌套子文件夹) import java.io.*; import java.util.*; public class FileSelection { private File rootDirectory;//根目录 private File[] fileList;//文件目录下面的文件列表(包括目录,用于多次判断) private ArrayList fileArrayList; // 用于存储文件(只是文件)列表 //初始化参数 public FileSelection() { fileArrayList=new ArrayList(); rootDirectory = new File("Test"); rootDirectory.mkdir(); } //获得文件(不包括目录)的列表 public void initFileArrayList() { if (rootDirectory.isDirectory()) { //遍历目录下面的文件和子目录 fileList = rootDirectory.listFiles(); for (int i = 0; i < fileList.length; i++) { //如果是文件,添加到文件列表中 if(fileList[i].isFile()){ fileArrayList.add(fileList[i]); } //否则递归遍历子目录 else if (fileList[i].isDirectory()) { fileList[i].mkdir(); rootDirectory=fileList[i]; initFileArrayList(); } } } } //将文件信息添加到列表中 public void addFiles(File f){ fileArrayList.add(f); } //访问器返回文件列表 public ArrayList getFileArrayList() { return fileArrayList; } } -------------------- BackupClient.java package com.xinxin.Client; import java.io.*; import java.net.*; /** * * @author Administrator *@version 1.0 *BackupClient类实现文件的传输到服务器 */ public class BackupClient implements Runnable{ private int port;//服务器端口 private InetAddress ipAddress;//服务器IP地址 private Socket clientSocket;//客户端套接字 private InputStream inputStream;//网络输入流 private OutputStream outputStream;//网络输出流 private File file; //构造函数(获得服务器端IP地址和监听端口号) public BackupClient(InetAddress ipAddress,int port,File file){ this.ipAddress=ipAddress; this.port=port;

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

洛尘渊.

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值