一、File
- 文件和目录路径的抽象表现形式,可以以文件或者文件路径构建成一个File对象,然后可以对该文件进行操作
- 相对路径:相对于参照物的路径,idea中多使用相对路径
- 绝对路径:从盘符开始的
1.1、file的构造方法
| 方法名 | 描述 |
|---|---|
| [File](…/…/java/io/File.html#File(java.io.File, java.lang.String))(File parent, String child) | 根据 parent 抽象路径名和 child 路径名字符串创建一个新 File 实例 |
| File(String pathname) | 通过将给定路径名字符串转换为抽象路径名来创建一个新 File 实例 |
| [File](…/…/java/io/File.html#File(java.lang.String, java.lang.String))(String parent, String child) | 根据 parent 路径名字符串和 child 路径名字符串创建一个新 File 实例。 |
| File(URI uri) | 通过将给定的 file: URI 转换为一个抽象路径名来创建一个新的 File 实例。 |
1.2、创建方法
| 方法名 | 描述 |
|---|---|
booleancreateNewFile() | 当且仅当不存在具有此抽象路径名指定名称的文件时,不可分地创建一个新的空文件。 |
booleanmkdir() | 创建此抽象路径名指定的目录 |
booleanmkdirs() | 创建此抽象路径名指定的目录,包括所有必需但不存在的父目录 |
1.3、删除文件及空文件夹
| 方法名 | 描述 |
|---|---|
booleandelete() | 删除此抽象路径名表示的文件或目录 |
1.4、判断方法
| 方法名 | 描述 |
|---|---|
booleanexists() | 测试此抽象路径名表示的文件或目录是否存在。 |
| boolean isFile() | 测试此抽象路径名表示的文件是否是一个标准文件 |
| boolean isDirectory() | 测试此抽象路径名表示的文件是否是一个目录 |
1.5、剪切并重命名到指定文件
| 方法名 | 描述 |
|---|---|
booleanrenameTo(File dest) | 剪切调用者的文件内容到dest文件中 |
1.6、获取的方法
| 方法名 | 描述 |
|---|---|
| public String getAbsolutePath() | 返回此抽象路径名的绝对路径名字符串 |
| public String getPath() | 返回File构造方法中的路径 |
| public String getParent() | 返回此抽象路径名父目录的路径名字符串 |
| public String getName() | 返回由此抽象路径名表示的文件或目录的名称 |
| public long length() | 返回由此抽象路径名表示的文件的长度 |
1.7、过滤方法
| 方法名 | 描述 |
|---|---|
| public String[] list() | 返回一个字符串数组,这些字符串指定此抽象路径名表示的目录中的文件和目录(一级目录下所有的目录以及文件) |
| public String[] list(FilenameFilter fifilter) | 返回一个字符串数组,这些字符串指定此抽象路径名表示的目录中满足指定过滤器的文件和目 |
| public File[] listFiles(FilenameFilter fifilter) | 返回抽象路径名数组,这些路径名表示此抽象路径名表示的目录中满足指定过滤器的文件和目录 |
| public File[] listFiles(FileFilter fifilter) | 返回抽象路径名数组,这些路径名表示此抽象路径名表示的目录中满足指定过滤器的文件和目录 |
| public File[] listFiles() | 返回一个抽象路径名数组,这些路径名表示此抽象路径名表示的目录中的文件和目录。 |
1.8、练习
package com.la.demo;
import java.io.File;
import java.io.FileFilter;
import java.util.Scanner;
public class TestFile5 {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
boolean flag=true;
do {
System.out.println("请输入文件目录");
String next = scanner.next();
File file = new File(next);
if (file.exists()){
if (file.isDirectory()){
file.listFiles(new FileFilter() {
@Override
public boolean accept(File pathname) {
if (pathname.getName().endsWith("java")&&pathname.length()>5*1024){
System.out.println(pathname.getName());
return true;
}
return false;
}
});
flag=false;
}else {
System.out.println("你输入的不是目录");
}
}else {
System.out.println("目录有误,请重新输入文件目录");
}
}while (flag);
}
}
1.9、练习
package com.la.demo;
import java.io.File;
import java.io.FileFilter;
import java.io.FilenameFilter;
import java.util.Arrays;
public class TestFile2 {
public static void main(String[] args) {
File file = new File("E:\\home");
String[] list = file.list();
System.out.println(Arrays.toString(list));
String[] jpgs = file.list(new FilenameFilter() {
@Override
public boolean accept(File dir, String name) {
if (name.endsWith("jpg")) {
return true;
}
return false;
}
});
System.out.println(Arrays.toString(jpgs));
File[] files = file.listFiles(new FileFilter() {
@Override
public boolean accept(File pathname) {
// System.out.println("--------------------------");
// System.out.println(pathname);
String path = pathname.getPath();
System.out.println(path);
if (path.endsWith("jpg")||path.endsWith("gif")||path.endsWith("jpeg")){
return true;
}
return false;
}
});
File[] list1 = file.listFiles(new FilenameFilter() {
@Override
public boolean accept(File dir, String name) {
if (name.endsWith("jpg") || name.endsWith("gif") || name.endsWith("jpeg")) {
return true;
}
return false;
}
});
System.out.println(Arrays.toString(files));
System.out.println(Arrays.toString(list1));
}
}
二、递归
-
自己调用自己,朝着不递归方向发展,方法参数会逐渐变小
-
案例
package com.la.demo;
import java.io.File;
public class TestFile3 {
public static void main(String[] args) {
deleteFile(new File("E:\\home\\c"));
}
public static void deleteFile(File file){
File[] files = file.listFiles();
for (File file1 : files) {
if (file1.isDirectory()){
deleteFile(file1);
}else {
file1.delete();
}
}
file.delete();
}
}
- 练习
package com.la.demo;
import java.io.File;
public class TestFile4 {
public static void main(String[] args) {
seeImage(new File("C:\\Users\\longao\\Desktop\\图片"));
}
public static void seeImage(File file){
if (file!=null){
if (file.isDirectory()){
File[] files = file.listFiles();
if (files!=null&&files.length>0){
for (File file1 : files) {
seeImage(file1);
String name = file1.getName();
if (name.endsWith("jpg")||name.endsWith("png")||name.endsWith("gif")||name.endsWith("jpeg")){
System.out.println(name);
}
}
}
}
}
}
}
三、IO流
3.1、概述
- 使用场景:文件的复制;文件的上传和下载;qq的及时通信
- 分类:流向:输入流和输出流;类型:字节流和字符流
- 万物皆字节,字节一般读取音频,字符一般读取纯文件(字符=字节流+编码表)
3.2、OutPutStream输出流
-
A.OutputStream 是一个抽象类 ;B.OutputStream 输出字节流的所有类的超类
-
常用子类FileOutPutStream、ObjectOutPutStream
-
常用方法
| 方法名 | 描述 |
|---|---|
| public void close() | 关闭流资源 |
| public void flush() | 将缓冲区的数据刷新到硬盘中 |
| public abstract void write(int b) | 一个一个字节来写入 |
| public void write(byte[] b) | 将字节数组内容来写入 |
| public void write(byte[] b, int off, int len) | 将字节数组指定长度的内容进行写入 |
四、FileOutPutStream
-
A.文件输出流是用于将数据写入 File ==>将数据写入到文件中
B.FileOutputStream 用于写入诸如图像数据之类的原始字节的流
C.要写入字符流,请考虑使用 FileWriter
-
构造方法
| 方法名 | 描述 |
|---|---|
| public FileOutputStream(File file) | 创建一个向指定 File 对象表示的文件中写入数据的文件输出流 |
| public FileOutputStream(String name) | 创建一个向具有指定名称的文件中写入数据的输出文件流 |
| public FileOutputStream(String name, boolean append) | 创建一个向具有指定 name 的文件中写入数据的输出文件流(如果为false则从文件的开头写入,如果为true从文件内容的末尾进行写入) |
- 构造方法的三件事
A.实例化FileOutputStream
B.创建一个空的文件
C.将FileOutputStream 指向这个空的文件
- 案例
package com.la.demo;
import java.io.FileOutputStream;
import java.io.OutputStream;
public class TestFileOutputStream {
public static void main(String[] args) throws Exception {
OutputStream outputStream=new FileOutputStream("e:\\1.txt");
outputStream.write(97);
OutputStream outputStream1=new FileOutputStream("e:\\2.txt");
outputStream1.write(new byte[]{97,98,99});
OutputStream outputStream2=new FileOutputStream("e:\\3.txt",true);
outputStream2.write(97);
String s="97 98 99";
byte[] bytes = s.getBytes();
outputStream2.write(bytes);
}
}
五、练习
- 递归删除图片
package com.la.demo1;
import java.io.File;
public class DeleteImage {
public static void main(String[] args) {
deleteImage(new File("e:\\home"));
}
public static void deleteImage(File file){
if (file.exists()){
if (file.isFile()){
if (file.getName().endsWith("png")||file.getName().endsWith("gif")||file.getName().endsWith("jpeg")||file.getName().endsWith("jpg")){
file.delete();
}
}else{
File[] files = file.listFiles();
if (files!=null&&files.length>0){
for (File file1 : files) {
deleteImage(file1);
}
}
}
}
}
}
- 获取一个文件夹下不同文件类型的数量
package com.la.demo1;
import java.io.File;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
public class CountFile {
static HashMap<String, Integer> map = new HashMap<>();
public static void main(String[] args) {
Map<String, Integer> count = count(new File("E:\\home"));
Set<Map.Entry<String, Integer>> entries = count.entrySet();
for (Map.Entry<String, Integer> entry : entries) {
System.out.println(entry.getKey()+":"+entry.getValue());
}
}
public static Map<String,Integer> count(File file){
if (file.exists()){
if (file.isFile()){
String substring = file.getName().substring(file.getName().indexOf(".")+1);
if (map.containsKey(substring)){
map.put(substring,map.get(substring)+1);
}else {
map.put(substring,1);
}
}else {
File[] files = file.listFiles();
if (files!=null&&files.length>0){
for (File file1 : files) {
count(file1);
}
}
}
}
return map;
}
}
- 一个文件内容复制到另一个文件中
package com.la.demo1;
import java.io.*;
public class CopyFile {
public static void main(String[] args) {
try {
copyFile(new File("e:\\home\\1.txt"),new File("e:\\home\\a\\1.txt"));
} catch (Exception e) {
e.printStackTrace();
}
}
public static void copyFile(File sFile, File dFile)throws Exception {
InputStream in = new FileInputStream(sFile);
OutputStream out = new FileOutputStream(dFile, true);
long n = sFile.length();
int b = (int) n;
byte[] a = new byte[b];
in.read(a, 0, b);
out.write(a, 0, b);
in.close();
out.close();
}
}
- 学生的增删改查
package com.la.demo2;
import java.text.SimpleDateFormat;
import java.util.Date;
public class Student {
private String sid;
private String name;
private int age;
private Date birthday;
public Student(String sid, String name, int age, Date birthday) {
this.sid = sid;
this.name = name;
this.age = age;
this.birthday = birthday;
}
public Student() {
}
public String getSid() {
return sid;
}
public void setSid(String sid) {
this.sid = sid;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public Date getBirthday() {
return birthday;
}
public void setBirthday(Date birthday) {
this.birthday = birthday;
}
@Override
public String toString() {
return "Student{" +
"sid='" + sid + '\'' +
", name='" + name + '\'' +
", age=" + age +"岁"+
", birthday=" + new SimpleDateFormat("yyyy-MM-dd").format(birthday) +
'}';
}
}
package com.la.demo2;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Collection;
import java.util.Date;
import java.util.HashMap;
import java.util.Scanner;
public class StudentManage {
static HashMap<String,Student> map= new HashMap<>();
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");
System.out.println("\t\t\t"+"欢迎来到学生管理系统");
boolean flag=true;
do {
System.out.println("请选择你的操作:1.添加学生、4.删除学生、3、修改学生、2、查看学生、5、退出系统");
int i = scanner.nextInt();
switch (i){
case 1:{
System.out.println("请输入学生的学号:");
String sid = scanner.next();
System.out.println("请输入学生的姓名:");
String name = scanner.next();
System.out.println("请输入学生的年龄:");
int age = scanner.nextInt();
System.out.println("请输入学生的生日:格式(yyyy-MM-dd)");
String next2 = scanner.next();
Date birthday=null;
try {
birthday= simpleDateFormat.parse(next2);
} catch (ParseException e) {
System.out.println("日期输入有误");;
}
if (!map.containsKey(sid)){
map.put(sid,new Student(sid,name,age,birthday));
}else {
System.out.println("该学生已存在,请勿重复操作");
}
break;
}
case 2:{
Collection<Student> values = map.values();
for (Student value : values) {
System.out.println(value);
}
break;
}
case 3:{
System.out.println("请输入要修改的学生的学号:");
String sid = scanner.next();
if (map.containsKey(sid)){
System.out.println("请输入要修改的学生的姓名:");
String name = scanner.next();
System.out.println("请输入要修改的学生的年龄:");
int age = scanner.nextInt();
System.out.println("请输入要修改的学生的生日:格式(yyyy-MM-dd)");
String next2 = scanner.next();
Date birthday=null;
try {
birthday= simpleDateFormat.parse(next2);
} catch (ParseException e) {
System.out.println("日期输入有误");
}
map.put(sid,new Student(sid,name,age,birthday));
}
break;
}
case 4:{
System.out.println("请输入要删除的学生学号:");
String sid = scanner.next();
map.remove(sid);
break;
}
case 5:{
System.exit(0);
break;
}
default:{
System.out.println("输入有误,请重新输入");
break;
}
}
}while (flag);
}
}
这篇博客详细介绍了Java中的File类,包括构造方法、文件创建与删除、判断操作、剪切重命名、获取信息及过滤方法。接着讨论了递归的概念,并提供了案例。此外,还深入讲解了IO流的基本概念、OutputStream及其子类FileOutputStream,以及相关操作方法。最后,给出了多个实战练习,如递归删除、统计文件类型数量和文件内容复制等。
997

被折叠的 条评论
为什么被折叠?



