文章目录
一、对文件夹,文本文件进行操作
1创建文本文件
2往文本文件中写入数据
3增加写入数据的健壮性
4从文本文件中读数据
5删除
5.1删除文本
5.2删除文件夹
6创建文件夹
标号对应下面代码
public class FileInputStreamDemo {
public static void main(String[] args) throws IOException {
//1.创建.txt文件
//File f1=new File("E:\\itcast\\fos.txt");
//System.out.println(f1.createNewFile());
//2.写数据,创建字节流输出对象
//FileOutputStream fos=new FileOutputStream("E:\\itcast\\fos.txt",true);
// for(int i=0;i<2;i++){
// fos.write("hello".getBytes());//实现了追加功能
// fos.write("\r\n".getBytes());
// }
// //释放资源
// fos.close();
//3.增加程序的健壮性
// FileOutputStream fos=null;
// try {
// fos= new FileOutputStream("E:\\itcast\\fos.txt");
// fos.write("hello".getBytes());
// } catch (FileNotFoundException e) {
// e.printStackTrace();
// } catch (IOException e) {
// e.printStackTrace();
// }finally {
// if(fos!=null){
// try {
// fos.close();
// } catch (IOException e) {
// e.printStackTrace();
// }
// }
// }
//4从.txt中读取数据
//创建字节流输入对象
//FileInputStream fis= new FileInputStream("E:\\itcast\\fos.txt");
//调用字节输入流对象的读数据方法
//调用字节输入流对象的读数据方法
//int read(byte[]b):从该输入流读取最多b.length个字节的数据到一个字节数组中
// byte[] bys=new byte[5];
// //第一次读取数据
// int len=fis.read(bys);
// System.out.println(len);
// System.out.println(new String(bys));
//4.1增强版
// byte[]bys=new byte[1024];//1024及其整数倍
// int len;
// while((len=fis.read(bys))!=-1){
// System.out.println(new String(bys,0,len));
// }
// //释放资源
// fis.close();
//5.删除
File f1=new File("E:\\itcast\\fos.txt");//删除文本文件
f1.delete();
File f2=new File("E:\\itcast");//删除文件夹,当文件夹中里面有内容时候,删除不成功
f2.delete();
//6.创建文件夹
//6.1创建一级文件夹,创建一个javaSE目录
File f3=new File("E:\\itcast\\javaSE");
f3.mkdir();
//6.2创建多级文件夹
File f4=new File("E:\\itcast\\javaSE\\javaSE1\\javaSE2");
f4.mkdirs();
}
}
二、复制文本文件
public class CopyTxtDemo {
public static void main(String[] args) throws IOException {
//根据数据源创建字节输入流对象
FileInputStream fis=new FileInputStream("E:\\itcast\\java.txt");
//根据目的地创建字节输出流对象
FileOutputStream fos=new FileOutputStream("E:\\fos.txt");
int by;
while((by=fis.read())!=-1){
fos.write(by);
}
//释放资源
fos.close();
fis.close();
}
}
三、复制图片
public class CopyJpgDemo {
public static void main(String[] args) throws IOException {
//根据数据源创建字节输入流对象
FileInputStream fis=new FileInputStream("E:\\itcast\\mn.jpg");
//根据目的地创建字节输出流对象
FileOutputStream fos=new FileOutputStream("E:\\itcast\\mn1.jpg");
//读写数据,复制图片(一次读取一个字节数组,一次写入一个字节数组)
byte[]bys=new byte[1024];
int len;
while ((len=fis.read(bys))!=-1){
fos.write(bys,0,len);
}
//释放资源
fos.close();
fis.close();
}
}
四、访问多级文件夹
public class searchDir {
public static void main(String[] args) throws IOException {
ArrayList<String> list = new ArrayList<>();
File srcFile =new File("C:\\Users\\QUANTUM\\Desktop\\beibei\\spider");
getAllFilePath(list,srcFile);
}
//定义一个方法,用于获取给定目录的所有内容,参数为第一步创建的File对象
public static void getAllFilePath(ArrayList<String> list,File srcFile) throws IOException {
//获取给定的File目录下所有的文件或者目录的File数组
File[]fileArray=srcFile.listFiles();
//遍历该File数组,得到每一个File对象
if(fileArray!=null){
Collections.reverse(Collections.singletonList(fileArray));
for (File file : fileArray) {
//判断file是目录
if(file.isDirectory()){
//是:递归调用
getAllFilePath(list,file);
}else{
//不是,获取绝对路径输出在控制台
// System.out.println(file.getAbsolutePath());
String path=file.getAbsolutePath();
list.add(path);
// writeData(path);
for(int i=0;i<fileArray.length;i++){
if(i==0){
writeSourceData(list.get(i));
}else if (i<fileArray.length){
writeRectionsData(list.get(i));
}
}
}
}
}
}
五、集合到文件数据排序改进版
public class TreeSetFileDemo {
/* 需求:键盘录入5个学生信息(姓名,语文成绩,数学成绩,英语成绩)。要求按照顾绩总分从高到低写入文本文件
格式:姓名,语文成绩,数学成绩,英语成绩举例:林青霞,98,99,100
思路:
1:定义学生类
2:创建TreeSet集合,通过比较器排序进行排序
3:键盘录入学生数据
4:创建学生对象,把键盘录入的数据对应赋值给学生对象的成员变量
5:把学生对象添加到TreeSet集合
6:创建字符缓冲输出流对象
7:遍历集合,得到每一个学生对象
8:把学生对象的数据拼接成指定格式的字符串
9:调用字符缓冲输出流对象的方法写数据
10:释放资源
*/
public static void main(String[] args) throws IOException {
//创建TreeSet集合,通过比较器排序进行排序
TreeSet<Student>ts=new TreeSet<Student>(new Comparator<Student>() {
@Override
public int compare(Student s1, Student s2) {
//主要条件,成绩从高到底
int num=s2.getSum()-s1.getSum();
//次要条件
int num2=num==0?s1.getChinese()-s2.getChinese():num;
int num3=num2==0?s1.getMath()-s2.getMath():num2;
int num4=num3==0?s1.getEnglish()-s2.getEnglish():num3;
return num4;
}
});
//键盘录入学生数据
for(int i=0;i<2;i++){
Scanner sc=new Scanner(System.in);
System.out.println("请输入第"+(i+1)+"个学生信息:");
System.out.println("姓名:");
String name=sc.nextLine();//字符串录入格式
System.out.println("语文成绩:");
int chinese=sc.nextInt();//int类型录入格式
System.out.println("数学成绩:");
int math=sc.nextInt();
System.out.println("英语成绩:");
int english=sc.nextInt();
//创建学生对象,把键盘录入的数据对应赋值给学生对象的成员变量
Student s=new Student();
s.setName(name);
s.setChinese(chinese);
s.setMath(math);
s.setEnglish(english);
ts.add(s);
}
//创建字符缓冲流对象
BufferedWriter bw=new BufferedWriter(new FileWriter("E:\\itcast\\java.txt"));
for (Student s : ts) {
//把学生对象的数据拼接成指定格式的字符串
//格式:姓名,语文成绩,数学成绩,英语成绩举例:林青霞,98,99,100
StringBuilder sb=new StringBuilder();
sb.append(s.getName()).append(",").append(s.getChinese()).append(",").append(s.getMath()).append(",").append(s.getEnglish()).append(",").append(s.getSum());
//调用字符缓冲输出流对象的方法写数据
bw.write(sb.toString());
bw.newLine();
bw.flush();
}
//释放资源
bw.close();
}
}