Chinaunix首页 | 论坛 | 博客
  • 博客访问: 3591887
  • 博文数量: 365
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 2522
  • 用 户 组: 普通用户
  • 注册时间: 2019-10-28 13:40
文章分类

全部博文(365)

文章存档

2023年(8)

2022年(130)

2021年(155)

2020年(50)

2019年(22)

我的朋友

分类: Java

2021-05-25 17:26:46

通过学习以上的几种流,我们也可以拓展尝试做下文件的复制:

创建包: cn.tedu.out

创建类: TestCopyFile.java

package cn.tedu.out;

import java.io.BufferedInputStream;

import java.io.BufferedOutputStream;

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.FileReader;

import java.io.FileWriter;

import java.io.IOException;

import java.io.InputStream;

import java.io.OutputStream;

import java.io.Reader;

import java.io.Writer;

import java.util.Scanner;

/**

 * 本类用于测试文件复制

 * 需求: 接收用户输入的文件路径来进行复制,复制到用户指定的路径下

 * */

public class TestCopyFile {

public static void main(String[] args) {

//1.提示并接收用户输入的要复制的源文件路径--复制啥

System.out.println("请输入源文件路径:");

//导包的快捷键:Ctrl+Shift+O  接收返回值:Alt+Shift+L

String f = new Scanner(System.in).nextLine();

//2.提示并接收用户输入的目标文件所在的位置--复制到哪

System.out.println("请输入目标文件的路径:");

String t = new Scanner(System.in).nextLine();

//3.1根据源文件路径封装from文件对象

File from = new File(f);

//3.2根据目标文件路径封装to文件对象

File to = new File(t);

//3.3根据用户提供的路径完成文件的复制操作

//自定义复制文件的方法--字符流--只能操作字符相关文件

//ZFcopy(from,to);

//自定义复制文件的方法--字节流--操作啥都行

ZJcopy(from,to);

}

public static void ZJcopy(File from, File to) {

InputStream in = null;//定义在整个方法中都生效的字节输入流对象,注意是局部变量,需要初始化,对象的默认值是null

OutputStream out = null;//定义在整个方法中都生效的字节输出流对象,注意是局部变量,需要初始化,对象的默认值是null

try {

//1.读取from文件--操作文件的是字节输入流

in = new BufferedInputStream(new FileInputStream(from));

//2.写出到to文件--操作文件的是字节输出流

out = new BufferedOutputStream(new FileOutputStream(to));

//3.边读边写

int b = 0;//定义变量b,记录读取到的数据

while( (b=in.read()) != -1 ) {//货币代码只有没有数据时,才返回-1,跳出循环,读写结束

out.write(b);//将读到的数据写出到文件

}

System.out.println("恭喜您!文件复制成功!");

} catch (IOException e) {

System.out.println("很抱歉!文件复制失败!");

e.printStackTrace();//打印错误信息

}finally {

//释放资源

try {

out.close();

} catch (IOException e) {

e.printStackTrace();

}

try {

in.close();

} catch (IOException e) {

e.printStackTrace();

}

}

}

public static void ZFcopy(File from, File to) {//字符流操作

Reader in = null ;//定义在整个方法中都生效的字符输入流对象,注意是局部变量,需要初始化,对象的默认值是null

Writer out = null;//定义在整个方法中都生效的字符输出流对象,注意是局部变量,需要初始化,对象的默认值是null

try {

//1.读取from文件--获取字符流输入对象

in = new BufferedReader(new FileReader(from));

//2.写出到to文件中--获取字符流输出对象

out = new BufferedWriter(new FileWriter(to));

//3.边读边写

int b = 0;//定义变量,保存读到的数据

while( (b = in.read()) != -1 ) {//当没有数据时,返回-1,读取循环结束

out.write(b);//将本轮循环读取到的内容写出

}

System.out.println("恭喜您!文件复制完成!");

} catch (IOException e) {

System.out.println("很抱歉!文件复制失败!");

e.printStackTrace();//正常打印报错信息

}finally {//finallytry-catch结构中一定会执行的部分,也就是如果有必须执行到的代码,可以写在这

/**

 * 1.流资源必须释放,释放的是之前使用过程中所有流对象

 * 2.关流是有顺序的,注意,后出现的流先释放,为了不影响代码

 * */

//4.释放资源

try {//用来关闭字符输出流

out.close();

} catch (IOException e) {

e.printStackTrace();

}

try {//用来关闭字符输入流

in.close();

} catch (IOException e) {

e.printStackTrace();

}

}

}

}

阅读(1138) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~