I/O实例练习
一.I/O九种复制文件方法
package cn.com.abner0528;
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStream;
public class NineCopy {
public static void main(String[] args) throws IOException {
String iPath="D:\\abner\\IO\\aa.txt";
String oPath="D:\\abner\\IO\\bb.txt";
//copybybyte(iPath,oPath);
//copybybyteArray(iPath,oPath);
//copybybufferbyte(iPath,oPath);
//copybybufferbyteArray(iPath,oPath);
//copybychar(iPath,oPath);
//copybycharArray(iPath,oPath);
//copybyBufferReaderchar(iPath,oPath);
//copybyBufferReadercharArray(iPath,oPath);
copybyBufferStringLine(iPath,oPath);
}
public static void copybybyte(String iPath,String oPath) throws IOException {
FileInputStream is=new FileInputStream(iPath);
FileOutputStream os=new FileOutputStream(oPath);
int len=-1;
while((len=is.read())!=-1) {
os.write(len);
}
System.out.println("复制成功");
os.close();
is.close();
}
public static void copybybyteArray(String iPath,String oPath) throws IOException {
FileInputStream is=new FileInputStream(iPath);
FileOutputStream os=new FileOutputStream(oPath);
byte[] bys=new byte[1024];
int len=-1;
while((len=is.read(bys))!=-1) {
os.write(bys);
}
System.out.println("复制成功");
os.close();
is.close();
}
public static void copybybufferbyte(String iPath,String oPath) throws IOException {
BufferedInputStream bi=new BufferedInputStream(new FileInputStream(iPath));
BufferedOutputStream bo=new BufferedOutputStream(new FileOutputStream(oPath));
int len=-1;
while((len=bi.read())!=-1) {
bo.write(len);
}
System.out.println("复制成功");
bo.close();
bi.close();
}
public static void copybybufferbyteArray(String iPath,String oPath) throws IOException {
BufferedInputStream bi=new BufferedInputStream(new FileInputStream(iPath));
BufferedOutputStream bo=new BufferedOutputStream(new FileOutputStream(oPath));
int len=-1;
byte[] bys=new byte[1024];
while((len=bi.read(bys))!=-1) {
bo.write(bys);
}
System.out.println("复制成功");
bo.close();
bi.close();
}
public static void copybychar(String iPath,String oPath) throws IOException {
FileReader fr=new FileReader(iPath);
FileWriter fw=new FileWriter(oPath);
int len=-1;
while((len=fr.read())!=-1) {
fw.write(len);
}
System.out.println("复制成功");
fw.close();
fr.close();
}
public static void copybycharArray(String iPath,String oPath) throws IOException {
FileReader fr=new FileReader(iPath);
FileWriter fw=new FileWriter(oPath);
int len=-1;
char[] chr=new char[1024];
while((len=fr.read(chr))!=-1) {
fw.write(chr);
}
System.out.println("复制成功");
fw.close();
fr.close();
}
public static void copybyBufferReaderchar(String iPath,String oPath) throws IOException {
BufferedReader br=new BufferedReader(new FileReader(iPath));
BufferedWriter bw=new BufferedWriter(new FileWriter(oPath));
int len=-1;
while((len=br.read())!=-1) {
bw.write(len);
}
System.out.println("复制成功");
bw.close();
br.close();
}
public static void copybyBufferReadercharArray(String iPath,String oPath) throws IOException {
BufferedReader br=new BufferedReader(new FileReader(iPath));
BufferedWriter bw=new BufferedWriter(new FileWriter(oPath));
int len=-1;
char[] ch=new char[1024];
while((len=br.read(ch))!=-1) {
bw.write(ch);
}
System.out.println("复制成功");
bw.close();
br.close();
}
public static void copybyBufferStringLine(String iPath,String oPath) throws IOException {
BufferedReader br=new BufferedReader(new FileReader(iPath));
BufferedWriter bw=new BufferedWriter(new FileWriter(oPath));
String readLine = br.readLine();
bw.write(readLine);
System.out.println("复制成功");
bw.close();
br.close();
}
}
二.随机点名程序
package cn.com.abner0528;
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Random;
/*
实现随机点名
思路:1.读取name文件
2.Buffer,rendline
3.定义集合
4.生成随机数
5遍历集合
*/
public class RandomName {
public static void main(String[] args) throws IOException {
BufferedReader br=new BufferedReader(new FileReader("D:\\abner\\IO\\name.txt"));
ArrayList<String> list=new ArrayList<>();
String len=null;
while((len=br.readLine())!=null) {
list.add(len);
}
Random it=new Random();
int no=it.nextInt(list.size());
for (int i = 0; i < list.size(); i++) {
if(i==no) {
System.out.println(list.get(i));
}
}
br.close();
}
}
三.多级文件夹下的所有目录复制到指定目录下
package cn.com.abner0528;
/*
IO流--多级文件夹下的所有目录复制到指定目录下
思路:1.输入输出流方法创建复制文件的方法
2.判断文件是否为文件夹的方法,如果是文件夹,要递归继续判断子文件夹
*/
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
public class CopyFile {
public static void main(String[] args) throws IOException {
File a=new File("D:\\abner\\IO\\A");
File b=new File("D:\\abner\\IO\\C");
//判断是否存在
if(!b.exists()) {
b.mkdir();
}
remove(a,b);
System.out.println("复制成功");
}
//对文件判断是否为文件的复制
public static void remove(File a,File b) throws IOException {
//判断文件是否为文件夹
//如果是文件夹
if(a.isDirectory()) {
//在目标文件夹中创建对应的子文件夹
File bm=new File(b, a.getName());
bm.mkdir();
//遍历子文件夹中的文件类型(判断是文件还是文件夹目录)
File[] files = a.listFiles();
for (File file : files) {
remove(file,bm); //将文件复制到子目录中
}
}else {
//如果是文件
File output=new File(b, a.getName()); //创建写入的目标空文件
copyFile(a, output); //调用COPY方法,写入到空文件中
}
}
//输入输出流copy文件
public static void copyFile(File input,File output) throws IOException {
BufferedReader br=new BufferedReader(new FileReader(input.getAbsolutePath()));
BufferedWriter bw=new BufferedWriter(new FileWriter(output.getAbsolutePath()));
char[] ch=new char[1024];
int len=-1;
while((len=br.read(ch))!=-1) {
bw.write(ch, 0, len);
}
bw.close();
br.close();
}
}