content
1. Collection to file
1.1. Copy the collection to a file
ArrayList<String> array = new ArrayList<String>();
array.add("hello");
array.add("world");
array.add("java");
BufferedWriter bw = new BufferedWriter(new FileWriter("array.txt"));
for(String s : array) {
bw.write(s);
bw.newLine();
bw.flush();
}
bw.close();
1.2, copy the file to the collection
BufferedReader br = new BufferedReader(new FileReader("array.txt"));
ArrayList<String> array = new ArrayList<String>();
String line;
while((line = br.readLine()) != null) {
array.add(line);
}
br.close();
for(String s : array) {
System.out.println(s);
}
1.3. Case: Caller
Requirement: I have a file that stores the names of classmates in the class, and each name occupies a line. It is required to implement a random caller through the program.
BufferedReader br = new BufferedReader(new FileReader("array.txt"));
ArrayList<String> array = new ArrayList<String>();
String line;
while((line = br.readLine()) != null) {
array.add(line);
}
br.close();
Random r = new Random();
int index = r.nextInt(array.size());
String name = array.get(index);
System.out.println("幸运者是"+name);
1.4. Copy collection to file (improved version)
ArrayList<Student> array = new ArrayList<Student>();
Student s1 = new Student("it001","张三",19,"山西");
Student s2 = new Student("it002","李四",20,"临汾");
Student s3 = new Student("it003","王五",21,"曲沃");
array.add(s1);
array.add(s2);
array.add(s3);
BufferedWriter bw = new BufferedWriter(new FileWriter("array.txt"));
for(Student s : array) {
StringBuilder sb = new StringBuilder();
sb.append(s.getSid()).append(",").append(s.getName()).append(",").append(s.getAge()).append(",").append(s.getAddress());
bw.write(sb.toString());
bw.newLine();
bw.flush();
}
bw.close();
1.5. Copy files to collections (improved version)
//创建字符缓冲输入流对象
BufferedReader br = new BufferedReader(new FileReader("array.txt"));
ArrayList<Student> array = new ArrayList<Student>();
String line;
while((line = br.readLine()) != null) {
String[] strArray = line.split(",");
Student s = new Student();
s.setSid(strArray[0]);
s.setName(strArray[1]);
s.setAge(Integer.parseInt(strArray[2]));
s.setAddress(strArray[3]);
array.add(s);
}
br.close();
for(Student s : array) {
System.out.println(s.getSid()+","+s.getName()+","+s.getAge()+","+s.getAddress());
}
2. Copy the folder
2.1. Copy a single-level folder
//创建数据源目录File对象,路径是E:\\java
File srcFolder = new File("E:\\java");
//获取数据源目录File对象的名称
String srcFolderName = srcFolder.getName();
//创建目的地目录File对象,路径名是模块名
File destFolder = new File("myCharStream",srcFolderName);
//判断目的地目录对应的File是否存在,如果不存在,就创建
if(!destFolder.exists()) {
destFolder.mkdir();
}
//获取数据源目录下所有文件的File数组
File[] listFiles = srcFolder.listFiles();
for(File srcFile : listFiles) {
//获取数据源文件file对象的名称
String name = srcFile.getName();
//创建目的地文件File对象,路径名是目的地目录组成
File destFile = new File(destFolder,name);
//复制文件,方法
copyFile(srcFile,destFile);
}
//定义复制文件的方法
private static void copyFile(File srcFile,File destFile) throws IOException{
BufferedInputStream bis = new BufferedInputStream(new FileInputStream(srcFile));
BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(destFile));
byte[] bys = new byte[1024];
int len;
while((len = bis.read(bys)) != -1) {
bos.write(bys, 0, len);
}
bis.close();
bos.close();
}
2.2. Copy multi-level folders
Requirements: Copy the E:java folder to the D: directory
//创建数据源目录File对象,路径是E:\\java
File srcFile = new File("E:\\java");
//创建目的地目录File对象,路径名是模块名
File destFile = new File("D:\\");
//复制文件夹,方法
copyFolder(srcFile,destFile);
//复制文件夹
private static void copyFolder(File srcFile,File destFile) throws IOException {
//判断数据源File是否是目录
if(srcFile.isDirectory()) {
//在目的地下创建和数据源File名称一样的目录
String srcFileName = srcFile.getName();
File newFolder = new File(destFile,srcFileName);
if(!newFolder.exists()) {
newFolder.mkdir();
}
//获取File下所有文件或目录的File数组
File[] fileArray = srcFile.listFiles();
for(File file : fileArray) {
copyFolder(file,newFolder);
}
}
else {
//说明是文件,直接复制,用字节流
File newFile = new File(destFile,srcFile.getName());
copyFile(srcFile,newFile);
}
}
//复制文件
private static void copyFile(File srcFile,File destFile) throws IOException{
BufferedInputStream bis = new BufferedInputStream(new FileInputStream(srcFile));
BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(destFile));
byte[] bys = new byte[1024];
int len;
while((len = bis.read(bys)) != -1) {
bos.write(bys, 0, len);
}
bis.close();
bos.close();
}