【Java-39】基于Java的IO流处理——字节流、字符流

IO流是什么,有什么作用

IO分别指输入流与输出流,IO作用是传输数据,因为数据不能直接传输,需要借助网络信号中“流”传输,故传输时候总有输入流与输出流,输入流是将数据转换为流,输出流是将流转换为数据,比如将某文件中数据弄到另一个文件中就需要借助流,以下是各种来源数据之间的传输事例代码

IO流又分为字节流(通过byte传播)与字符流(通过字符传播)

字节流处理——文件的复制黏贴

对于文件夹向文件夹的复制,如果输入端是文件,则直接调用文件向文件/文件夹复制函数capoyFile如果输入端不是文件而是文件夹,那么按照递归思路进行:使用mkdirs将输出文件夹建立(存在的话就不建立实际上是个建立新文件夹的过程)

package File_some;

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.nio.Buffer;

//字节流

//将一个文件中数据拷贝到另一个
public class capoy {

public static void main(String[] args) throws Exception {
	String strPath="C:/A_Java/Project_1/str___";
	String destPath="C:/A_Java/Project_1/dest";
	File file3=new File(strPath);
	File file4=new File(destPath);	

	capoy.capoy(file3,file4);
//	deletefile(Path); 
}

//将str复制黏贴到目标dest
/**
 * 对于文件夹向文件夹的复制,如果输入端是文件,则直接调用文件向文件/文件夹复制函数capoyFile
                   如果输入端不是文件而是文件夹,那么按照递归思路进行:使用mkdirs将输出文件夹建立(存在的话就不建立
                   实际上是个建立新文件夹的过程)
 * @param args
 * @throws Exception
 */
public static void capoy(File str,File dest) throws IOException {
	if(str.isFile()){
		capoyFile(str, dest);
	}
	if(str.isDirectory()){
		dest.mkdirs();
		for(File file:str.listFiles()){
			capoy(file,new File(dest,file.getName()));
		}
	}	
}

//将文件file1复制到file2,如果file2是文件则直接复制,如果是文件夹则应该在文件夹下先建立个文件
public static void capoyFile(File file1,File file2) throws IOException {
	if(file2.isDirectory()){
		file2=new File(file2,file1.getName());
	}
	InputStream ins=new FileInputStream(file1);//输入流
	OutputStream outs=new FileOutputStream(file2);//输出流
	
//	//加一个缓存
//	InputStream ins=new BufferedInputStream(new FileInputStream(file1));//输入流
//	OutputStream outs=	new BufferedOutputStream(new FileOutputStream(file2));//输出流
	
	 byte flu[]=new byte[1024];
	 int len;
	 while((len=ins.read(flu))!=-1){
		 outs.write(flu, 0, len);
	 }
	 outs.close();
	 ins.close();
	
}

//删除文件夹及其子文件夹
public static boolean deletefile(String delpath) throws Exception {
    try {

        File file = new File(delpath);
        // 当且仅当此抽象路径名表示的文件存在且 是一个目录时,返回 true
        if (!file.isDirectory()) {
            file.delete();
        } else if (file.isDirectory()) {
            String[] filelist = file.list();
            for (int i = 0; i < filelist.length; i++) {
                File delfile = new File(delpath + "\\" + filelist[i]);
                if (!delfile.isDirectory()) {
                    delfile.delete();
                    System.out.println(delfile.getAbsolutePath() + "删除文件成功");
                } else if (delfile.isDirectory()) {
                    deletefile(delpath + "\\" + filelist[i]);
                }
            }
            System.out.println(file.getAbsolutePath() + "删除成功");
            file.delete();
        }

    } catch (FileNotFoundException e) {
        System.out.println("deletefile() Exception:" + e.getMessage());
    }
    return true;
}

}

字符流事例——文件的读取写入、复制黏贴

package File_some;
//字符流

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

public class Txt_file {
public static void main(String[] args) throws IOException {
	//文件的读取
	String Path="C:/A_Java/Project_1/11.txt";
	File file=new File(Path);
	Txt_file.read_txt(file);
	
	//文件的写入
	Path="C:/A_Java/Project_1/写入.txt";
	File file1=new File(Path);
	Txt_file.write_txt(file1);
	
	//TXT文件的复制黏贴,从file2复制到file3
	String Path2="C:/A_Java/Project_1/src/File_some/Txt_file.java";
	File file2=new File(Path2);
	String Path3="C:/A_Java/Project_1/copy2.txt";
	File file3=new File(Path3);
	Txt_file.copy_txt(file2,file3);
	
	
}

public static void read_txt(File file1) throws IOException {
	Reader read=new FileReader(file1) ;
	 char flu[]=new char[100];
	 int len;
	 while((len=read.read(flu))!=-1){
		 String str=new String(flu, 0, len);
		System.out.println(str);
	 }	
}


public static void write_txt(File file1) throws IOException {
	Writer write1=new FileWriter(file1);
	String str="一叶舟轻,双桨鸿惊\r\n水天清、影湛波平。鱼翻藻鉴,鹭点烟汀\r\n过沙溪急,霜溪冷,月溪明\r\n重重似画,曲曲如屏\r\n算当年、虚老严陵。君臣一梦,今古空名\r\n但远山长,云山乱,晓山青。";
	write1.write(str);//write1.write(str,ture);追加
	write1.append("\n\n246757");
	write1.flush();//刷新
	System.out.println("=================================");
	System.out.println(file1.getAbsolutePath());
	read_txt(file1);
}

/**
 * 将一个txt文件复制黏贴到另一个txt中
 * @param file1
 * @param file2
 * @throws IOException
 */
public static void copy_txt(File file1,File file2) throws IOException {
	if(file2.isDirectory()){//如果file2是文件夹则应该先建立txt文件再复制
		file2=new File(file2,file1.getName());
	}
	
//	Reader read=new FileReader(file1) ;
//	Writer write1=new FileWriter(file2);
//	 char flu[]=new char[100];
//	 int len;
//	 while((len=read.read(flu))!=-1){
//		 write1.write(flu, 0, len);
//		//System.out.println(str);
//	 }

	//使用字符缓存增强机制可以一行一行读取
	BufferedReader read=new BufferedReader(new FileReader(file1));//输入流
	BufferedWriter write1=new BufferedWriter(new FileWriter(file2));//输出流
	 String str;
	 while((str=read.readLine())!=null){
		 write1.write(str);
		 write1.newLine();
		//System.out.println(str);
	 }
	write1.flush();
}

}

猜你喜欢

转载自blog.csdn.net/weixin_42034217/article/details/86660982