/**
*
*/
package api.io.pratices;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.Scanner;
/**
* 这个类用来练习测试“文件复制”
*/
public class Test2_FileCopy2 {
/**
*
*/
public Test2_FileCopy2() {
// TODO Auto-generated constructor stub
}
/**
* 日常小黄线:The value of the local variable field is not used;
* 日常小注解:Add @SuppressWarnings 'unused' to main()/method()/field;
* 日常小注解:Add @SuppressWarnings 'deprecation' to main()/method()/field;
* 日常小注解:Add @SuppressWarnings 'resource' to main()/metod()/field;
* 日常小注解:Add @SuppressWarnings 'null' to main()/method()/field;
* 日常小注解:@SuppressWarnings("resource") == @SuppressWarnings({ "resource" })
* 日常小异常:Exception--API(IO)IOException--FileNotFoundException
*/
@SuppressWarnings("resource")
public static void main(String[] args) {
//字节流In和Out:以字节流读入写出的方式进行不同文件间的资源复制
//Test2_FileCopy2.method();
//读取一号文件,写出到二号文件中
//@SuppressWarnings({ "resource" })
System.out.println("请输入源文件的路径,即请输入需要进行复制数据的文件路径:");
String s = new Scanner(System.in).nextLine();
File f = new File(s); //封装源文件路径,抽象化为抽象路径名
System.out.println("请输入目标文件的路径,即请输入需要进行粘贴数据的文件路径:");
String s2 = new Scanner(System.in).nextLine();
File f2 = new File(s2); //封装目标文件路径,抽象化为抽象路径名
//完成文件间的交互:复制与粘贴
copy(f, f2);
System.out.println("复制成功!!!");
}
private static void copy(File f, File f2) {
/** 文件复制开发思路:
1、创建电脑磁盘文件与程序的数据连接流动通道,实际文件路径名抽象化为抽象路径名
2、字节流读取,将电脑磁盘中的指定文件的数据资源,通过数据连接流动通道,读入程序
3、字节流写入,将程序中从上一个文件读取的数据资源,通过数据连接流动通道,写入与该文件路径相同的另一个文件中,完成文件之间的数据资源复制
4、关闭释放资源
程序充当两个文件间交互中介,数据的读入与写出,通过程序完成,进而完成两个文件间数据资源交互。
*/
//1.2文件读写,都存在诸多IO类异常,通常直接catch大异常:捕捉处理异常Unhandled exception type FileNotFoundException
try {
//1.1创建读取流对象is,即建立程序与磁盘文件进行交互的数据连接流动通道is,将磁盘文件f的数据资源,读入程序
InputStream is = new FileInputStream(f);
/**第2步开发总思路,并分步解析该思路:当程序读取完指定文件的所有数据,需要将程序中读取到的所有资源,写入/写出到目标路径下的目标文件中,最终完成所谓的文件复制*/
//2.1当程序读取完指定文件f的所有数据,建立需要将程序所读取的上一个文件f中的所有数据,写入到目标文件f2的通道os(水管)
OutputStream os = new FileOutputStream(f2);
//1.4将磁盘文件的数据资源,读入程序。while循环循环读取磁盘文件中的所有数组资源,直至将文件中的数据全部读取完毕,read()返回-1:is.read()
//1.5定义一个变量,记录程序每读取文件中的一个数据,它的字节。并在程序中打印显示出来,以核对程序所读数据是否与文件中数据正确一致
int i;
while((i = is.read()) != -1) {
//1.6并在程序中打印显示出来,以核对程序所读数据是否与文件中数据正确一致
System.out.println(i);
//2.3通过程序,程序读取指定磁盘文件f中所有数据的同时,再通过程序,将这些数据写入到目标磁盘文件f2中去。最终,在此步,完成两个不同文件间的数据资源复制
os.write(i);
}
//1.3创建字节输入流通道is的同时,应当同时创建水龙头,防止程序读取磁盘文件资源完毕后,数据泄露缺失不完整
is.close(); //字节流通道(水管)水龙头
os.close(); //2.2与1.3同理
}catch(IOException e) {
e.printStackTrace();
}
}
//@SuppressWarnings({ /**"unused"*/ }) == @SuppressWarnings() == @SuppressWarnings({})
@SuppressWarnings({ "unused" })
private static void method() {
/** 文件复制开发思路:
1、创建电脑磁盘文件与程序的数据连接流动通道,实际文件路径名抽象化为抽象路径名
2、字节流读取,将电脑磁盘中的指定文件的数据资源,通过数据连接流动通道,读入程序
3、字节流写入,将程序中从上一个文件读取的数据资源,通过数据连接流动通道,写入与该文件路径相同的另一个文件中,完成文件之间的数据资源复制
4、关闭释放资源 */
//1.2、文件读写,都存在诸多异常,通常直接catch大异常:捕捉处理异常try/catch
try {
//1.1建立程序与电脑磁盘的文件之间的数据连接流动通道is,进行程序与磁盘文件的交互,将磁盘文件的数据读入程序
//普通字节流读入
InputStream is = new FileInputStream(new File("E:\\JavaDevelopmentEngineer\\java\\JDK\\Jdk1.8\\Temps\\Tmooc2002\\Workspaces\\bin\\io\\IONewFile()_2.txt"));
//2.1创建字节写入流工具父类OutputStream实例对象,即建立将程序中存取自上一个文件的数据资源传输到,与上一个文件同意路径下的另一个文件中,的数据连接流动通道
//普通字节写入流,append默认false,默认覆盖该文件中的原有数据
OutputStream os = new FileOutputStream(new File("E:\\JavaDevelopmentEngineer\\java\\JDK\\Jdk1.8\\Temps\\Tmooc2002\\Workspaces\\bin\\io\\IONewFile()_3.txt"));
//1.4通过数据连接流动通道is,将磁盘文件的数据资源读入程序:is.read();
//1.6创建一个变量,记录每读取一次文件数据,得到的字节,直至读完该文件中所有数据资源
int i;
while((i = is.read()) != -1) { //1.5while循环读取文件中所有数据资源到程序中。while循环判断条件:当文件中没有数据资源可读仍读时,返回-1,反之,不等于-1
//1.7将程序从磁盘文件中读到的数据,打印并显示,核查读到的所有数据与文件中的数据是否一致、正确
System.out.print(i);
//2.3通过此写入流通道os,将程序中的数据资源写入文件
// os.write(is.read());
//os.write(i + "");The method write(int) in the type OutputStream is not applicable for the arguments (String)
os.write(i);
}
//1.3程序读取磁盘文件数据资源,通过数据连接流动通道时,应当同时设置水龙头开关,防止数据传输完毕后数据继续在通道中流动传输造成泄露流失
is.close();
//2.2通过数据写入连接流动通道,程序数据读入磁盘文件时,应当同时设置水龙头开关,防止数据传输完毕后数据继续在通道中流动传输造成泄露流失
os.close();
}catch(IOException e) {
e.printStackTrace();
}
//彦舜:https://mp.weixin.qq.com/s?__biz=MzU4ODkxMzYyMw==&mid=2247483731&idx=1&sn=67b332ea70fc43d57d5bcc61b3d91236&chksm=fdd4cfebcaa346fdc18e8d8753319886f32ccf0826cbd0e8fa7081a40196172940f44498e97f&sessionid=0&scene=126&subscene=0&clicktime=1598950811&enterid=1598950811&ascene=3&devicetype=android-28&version=2700113f&nettype=cmnet&abtest_cookie=AAACAA%3D%3D&lang=zh_CN&exportkey=AS%2BWRvMS3wHhOl%2BeRJoI68U%3D&pass_ticket=TvK%2BFPKj%2BXRAnIWw%2BIHia37FmGWhsU2e4uQ65a2BCga0YyuUuai8WzowCgxvfhIT&wx_header=1
}
}
彦舜原创,CSDN