I/O流简述
A:IO流概述
IO流用来处理设备之间的数据传输
Java对数据的操作是通过流的方式
Java用于操作流的对象都在IO包中 java.io
B:IO流分类
a:按照数据流向 站在内存角度
输入流 读入数据
输出流 写出数据
b:按照数据类型
字节流 可以读写任何类型的文件 比如音频 视频 文本文件
字符流 只能读写文本文件
什么情况下使用哪种流呢?
如果数据所在的文件通过windows自带的记事本打开并能读懂里面的内容,就用字符流。其他用字节流。
如果你什么都不知道,就用字节流
输入流读文件,输出流写文件
我们试想生活中的文件复制步骤为Ctrl+C,Ctrl+V,通过这两个步解决问题,IO流完成复制的话也是两个步骤,首先用输入流来完成Ctrl+C,再用输出流完成Ctrl+V。输入流(源文件)每次读取一些信息,输出流在自己的文件里写入这些信息,输入流再读信息,输出流继续把读出的信息写进去,直到输出流读完信息,输入流就完成了信息写入,最终显示的就是文件复制
File src = new File("G:\\测试图片");//源文件位置
File target = new File("D:\\" + src.getName());//目标文件位置
File[] files = target.listFiles();
FileInputStream in = new FileInputStream(f);
File file = new File(target, f.getName());
FileOutputStream out = new FileOutputStream(file);
int len=0;
byte[] bytes = new byte[1024 * 8];
while((len=in.read(bytes))!=-1){
out.write(bytes,0,len);
out.flush();
}
in.close();
out.close();
递归实现文件夹复制
因为IO流并不能把文件夹复制出来,只能复制文件夹里的文件,所以我们遇到文件夹的时候先遍历文件夹,把文件给复制出来,当文件夹里含有文件夹的时候,我们再去遍历这个子文件夹,再次遍历文件夹就是在完成递归操作。
File[] files = src.listFiles();
for (File f : files) {
if(f.isFile()){
copy(f,target);
}else{
//创建文件夹
String name = f.getName();
target=new File(target,name);
fileCopy(f,target);
}
}
当然,我们在递归遍历文件夹的时候,需要创建该子文件夹,把子文件夹封装起来,传递给fileCopy(),通过该方法实现子文件夹创建
private static void fileCopy(File src, File target) throws IOException {
//target = new File(src.getName());
if(!target.exists()){
target.mkdirs();
copyFile(src,target);
}else{
copyFile(src,target);
}
}
源代码
public class MyTest {
public static void main(String[] args) throws IOException {
File src = new File("G:\\测试图片");
File target = new File("D:\\" + src.getName());
fileCopy(src, target);
fileChangename(target);
}
private static void fileChangename(File target) {
File[] files = target.listFiles();
for (File f : files) {
if(f.isFile()){
if(f.getName().endsWith(".jpg")){
String fParent = f.getParent();
String s = f.getName().replace(".jpg", ".png");
File f2=new File(fParent,s);
boolean b = f.renameTo(f2);
System.out.println(b);
}
}else{
fileChangename(f);
}
}
}
private static void fileCopy(File src, File target) throws IOException {
//target = new File(src.getName());
if(!target.exists()){
target.mkdirs();
copyFile(src,target);
}else{
copyFile(src,target);
}
}
private static void copyFile(File src, File target) throws IOException {
File[] files = src.listFiles();
for (File f : files) {
if(f.isFile()){
copy(f,target);
}else{
//创建文件夹
String name = f.getName();
target=new File(target,name);
fileCopy(f,target);
}
}
}
private static void copy(File f, File target) throws IOException {
FileInputStream in = new FileInputStream(f);
File file = new File(target, f.getName());
FileOutputStream out = new FileOutputStream(file);
int len=0;
byte[] bytes = new byte[1024 * 8];
while((len=in.read(bytes))!=-1){
out.write(bytes,0,len);
out.flush();
}
in.close();
out.close();
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/14644.html