集合到文件
//把ArrayList集合中的字符串数据写入文本文件,每1个字符串元素作为文件的1行数据
public class ArrayListToTextDmo {
public static void main(String[] args) throws IOException {
//创建ArrayList集合
ArrayList array=new ArrayList<>();
//往集合种存储字符串元素
array.add("Hello");
array.add("world");
array.add("java");
//创建字符缓冲输出流对象
BufferedWriter bw=new BufferedWriter(new FileWriter("FileIO\\bw.txt"));
//遍历集合,得到每1个字符串数据
for(String s:array){
//调用字符缓冲流输出对象的方法写数据
bw.write(s);
bw.newLine();
bw.flush();
}
//释放资源
bw.close();
}
}
Improve版本
//把ArrayList集合中的学生数据写入文本文件,每1个学生对象作为文件的1行数据
public class ArrayListToTextDmo {
public static void main(String[] args) throws IOException {
//创建ArrayList集合
ArrayList array=new ArrayList<>();
//创建学生对象
Student s1 = new Student("itheima001","Jack",20,"南京");
Student s2 = new Student("itheima002","Tom",25,"武汉");
Student s3 = new Student("itheima003","Mary",18,"北京");
//把学生对象添加到集合中
array.add(s1);
array.add(s2);
array.add(s3);
//创建字符缓冲输出流对象
BufferedWriter bw=new BufferedWriter(new FileWriter("FileIO\\bw.txt"));
//遍历集合,得到每1个学生对象数据
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行数据是1个集合元素
public class TxtToArrayListDemo {
public static void main(String[] args) throws IOException {
//创建字符缓冲输入流对象
BufferedReader br = new BufferedReader(new FileReader("FileIO\\br.txt"));
//创建ArrayList集合对象
ArrayList array = new ArrayList<>();
//调用字符缓冲输入流方法的对象读数据
String line;
while((line=br.readLine())!=null){
//把读取到的字符串数据存储到集合中
array.add(line);
}
//释放资源
br.close();
//遍历集合
for(String s:array){
System.out.println(s);
}
}
}
Improve版本
//把文本文件中的学生数据读取到集合中,并遍历集合,文件中每1行数据是1个集合元素
public class TxtToArrayListDemo {
public static void main(String[] args) throws IOException {
//创建字符缓冲输入流对象
BufferedReader br = new BufferedReader(new FileReader("FileIO\\br.txt"));
//创建ArrayList集合对象
ArrayList array = new ArrayList<>();
//调用字符缓冲输入流方法的对象读数据
String line;
while((line=br.readLine())!=null){
//把读取到的字符串用split()进行分割,得到1个字符串数组
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.getSid());
}
}
}
复制单级文件夹
//把E:\\itcast这个文件复制到模块目录下
public class CopyFolderDemo {
public static void main(String[] args) throws IOException{
//创建数据源目录File对象,路径是E:\\itcast
File srcFolder = new File("E:\\\\itcast");
//获取数据源目录File对象的名称
String srcFolderName=srcFolder.getName();
//创建目的地目录File对象,路径名是模块名+itcast组成
File destFolder=new File("FileIO",srcFolderName);
//判读目的地目录对应的File是否存在,如果不存在就创建
if(!destFolder.exists()){
destFolder.mkdir();
}
//获取数据源目录下所有文件的File数组
File[] listFiles=srcFolder.listFiles();
//遍历File数组,得到每一个File对象,该File对象,其实就是数据源文件
for(File srcFile:listFiles){
//数据源文件:E:\\itcast\\mn.jpg
//获取数据源文件File对象名称(mn..jpg)
String srcFileName=srcFile.getName();
//创建目的地文件File对象,路径名是目的地目录+mn.jpg组成
File destFile=new File(destFolder,srcFileName);
//复制文件
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);
}
bos.close();
bis.close();
}
}
复制多级文件
public class CopyFoldersDemo {
public static void main(String[] args) throws IOException {
//创建数据源File对象,路径是E:\\itcast
File srcFile = new File("E:\\\\itcast");
//获取目的地File对象,路径是F:\\
File destFile=new File("F:\\");
//写方法实现文件夹复制,参数为数据源File对象和目的地File对象
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();
//遍历该File数组,得到每一个File对象
for(File file:fileArray){
//把该File作为数据源File对象,递归调用复制文件夹的方法
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);
}
bos.close();
bis.close();
}
}
复制文件的异常处理
private static void method2(){
FileReader fr=null;
FileWriter fw=null;
try{
fr=new FileReader("fr.txt");
fw=new FileWriter("fw.tct");
char[] chs=new char[1024];
int len;
while((len=fr.read())!=-1){
fw.write(chs,0,len);
}
}catch (IOException e){
e.printStackTrace();
}finally {
if(fw!=null){
try {
fw.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if(fr!=null){
try {
fr.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
JDK7改进方案(较优)
public static void method3(){
try(FileReader fr=new FileReader("fr.txt");
FileWriter fw=new FileWriter("fw.txt");){
char[] chs=new char[1024];
int len;
while((len=fr.read())!=-1){
fw.write(chs,0,len);
}
}catch (IOException e){
e.printStackTrace();
}
}
JDK9改进方案
public static void method4() throws IOException{
FileReader fr=new FileReader("fr.txt");
FileWriter fw=new FileWriter("fw.txt");
try(fr;fw){
char[] chs=new char[1024];
int len;
while((len=fr.read())!=-1){
fw.write(chs,0,len);
}
}catch (IOException e){
e.printStackTrace();
}
}