这里写自定义目录标题
(IO,设置编码集)转换流实现文件复制
大家好! 学习了有一阵子了,这两天练习了IO流方面,在此想分享给大家比较简单且有代表性的转换流实现文件复制功能,第一次写,如有不足,请大佬们指点。
常见的IO流
我们从两个维度来了解一下常用的一些流:
字节流 | 字符流 | |
---|---|---|
输入流 | InputStream | Reader |
输出流 | OutputStream | Writer |
I/O流继承结构
I/O流思维导图
实现代码
转换流实现复制功能(单字符读取)代码:
/**
* 字符转换流实现文件的复制操作
*/
public class Testapi {
public static void main(String[] args) {
/**
*
* 这里我们输入需要复制的文件的地址 *注意 需要用到的 \ 的情况下java默认认为是转义字符
* 所以输入磁盘路径地址需要在 \ 前再加一个 \ eg:D:\\ready\\a.txt
*/
System.out.println("请输入复制地址:");
String f = new Scanner(System.in).nextLine();
System.out.println("请输入目的地址:");
String t = new Scanner(System.in).nextLine();
copyOf(f,t); //这里调用的下边自定义的静态方法
}
public static void copyOf(String f,String t){
BufferedReader in = null;//定义缓冲字符输入流,用于后续的读取
BufferedWriter out = null;//定义缓冲字符输出流,用于后续的输出
try {
in = new BufferedReader(new InputStreamReader(new FileInputStream(f)));
out = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(t)));
int b ;
while((b=in.read())!=-1){
out.write(b);
}
System.out.println("恭喜,复制成功");
} catch (Exception e) {
System.out.println("复制失败");
e.printStackTrace();
}finally {
try {
in.close();
out.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
转换流实现读取文件信息输出以及复制功能(多字符读取)代码:
/**
* 字符转换流实现文件的复制操作
*/
public class Testapi {
public static void main(String[] args) {
/**
*
* 这里我们输入需要复制的文件的地址 *注意 需要用到的 \ 的情况下java默认认为是转义字符
* 所以输入磁盘路径地址需要在 \ 前再加一个 \ eg:D:\\ready\\a.txt
*/
System.out.println("请输入复制地址:");
String f = new Scanner(System.in).nextLine();
System.out.println("请输入目的地址:");
String t = new Scanner(System.in).nextLine();
copyOf(f,t); //这里调用的下边自定义的静态方法
}
public static void copyOf(String f,String t){
BufferedReader in = null;//定义缓冲字符输入流,用于后续的读取
BufferedWriter out = null;//定义缓冲字符输出流,用于后续的输出
try {
in = new BufferedReader(new InputStreamReader(new FileInputStream(f)));
out = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(t)));
char []ch = new char[8192];//
int len = in.read(ch);//将多字符读入数组,然后返回读取的字符数。
System.out.println(new String(ch,0,len));
out.write(new String(ch,0,len));//String的构造方法,可见上边的介绍
System.out.println("恭喜,复制成功");
} catch (Exception e) {
System.out.println("复制失败");
e.printStackTrace();
}finally {
try {
in.close();
out.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}