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();
}
}