文件:
绝对路径创建
File file = new File("D:/Demo/text.txt");
//不要求这个文件真的存在
System.out.println(file.getName());
System.out.println(file.getPath());
System.out.println(file.getParent());
System.out.println(file.getAbsoluteFile());
System.out.println(file.getCanonicalFile());
结果:
text.txt
D:\Demo\text.txt
D:\Demo
D:\Demo\text.txt
D:\Demo\text.txt
File文件如果不存在可以使用createNewFile()方法手动创建,不能自动创建
deleteOnExit:退出后删除.
相对路径创建
File file = new File("./Demo/text.txt");
//不要求这个文件真的存在
System.out.println(file.getName());
System.out.println(file.getPath());
System.out.println(file.getParent());
System.out.println(file.getAbsoluteFile());
System.out.println(file.getCanonicalFile());
结果:
text.txt
.\Demo\text.txt
.\Demo
D:\IDEA\code\JDBCDemo1.\Demo\text.txt
D:\IDEA\code\JDBCDemo1\Demo\text.txt
创建文件:
File file = new File("./text.txt");
file.createNewFile();
System.out.println(file.exists());
System.out.println(file.isFile());
System.out.println(file.isDirectory());
System.out.println("============");
file.delete();
System.out.println(file.exists());
System.out.println(file.isFile());
System.out.println(file.isDirectory());
true
true
false
======
false
false
false
Process finished with exit code 0
Process finished with exit code 0
但是创建多级目录会报错
目录: File.mkdir():只能创建一级目录
File.mkdirs():可以创建多级目录
File dir = new File("./text");
dir.mkdir();
dir.delete();
dir.renameTo(new File("./tedd")); //重命名
流对象:读写文件的相关对象
字节流 : 操作二进制数据
IntputStream FileIntputStream 读取文件
OutputStream FileOutputStream 写文件
read():
无参数:一次读取一个字节
一个参数:输出型参数.即就是一个模板,把读取到的内容填充到模板(字节数组)上.
三个参数:和2类似.只不过是往数组的一部分区间内填充
案例: InputStrem
public static void main(String[] args) throws IOException {
//使用字节流来读取文件 InputStream 二进制数据
InputStream inputStream = new FileInputStream("d:/Test.txt");
//读文件
//第一种
while (true){ //因为不知道长度 所以使用循环
int b = inputStream.read();
if (b == -1){
//读取完毕
break;
}
System.out.println(""+(byte)b);
}
//第二种
while (true){
byte[] buffer = new byte[1024];
int b = inputStream.read(buffer);
if (b == -1){
break;
}
for (int i = 0; i <b ; i++) {
System.out.printf("%x \n",buffer[i]);
}
}
inputStream.close();
}
读取大文件:
字节流没有乱码的概念. 文件处理是一边读,一边处理.
buffer的意义是为了提高IO的效率. 单次操作IO的消耗时间比较大,所以应该缩短IO的次数提高整体的效率.
OutputSteeam:
write: 写入一个字节/写入一个字节数组/写入一个字节数组一部分
三个参数: 第一个参数: 写入哪个字节数组
第二个参数:起始位置
第三个参数:写入的数组长度
如果想在文件后追加写入的话需要在构造方法中加true;
FileOutputStream fos = new FileOutputStream(“C://File//b.txt”, true);
字符流: 操作文本数据
Reader FileReader
Writer FileWriter
流对象的核心操作大概有4个:
打开文件: 构造对象
关闭文件: close
读文件: Reader/InputSream
try ( Reader reader = new FileReader("d:/Test.txt")){
while (true){
int len = reader.read();
if (len == -1){
break;
}
// System.out.printf("%c",(char)len);
System.out.println((char)len);
}
} catch (IOException e) {
e.printStackTrace();
}
写文件:Writer/OutputStream
和OutputSteam类似
复习:
缓冲区:写操作 是先写到缓冲区中,还没有进入硬盘. 需要flush或者close操作进行刷新缓冲区才能进入硬盘
删除目录下的文件:
package IO;
import java.io.File;
import java.util.Scanner;
public class Demo7 {
public static void main(String[] args) {
//让用户输入一个指定搜索的目录
Scanner sc = new Scanner(System.in);
String fileString = sc.next();
File file = new File(fileString);
//判断这个是不是文件夹
if (!file.isDirectory()){
System.out.println("输入的目录有误");
return;
}
//让用户输入要删除的文件
System.out.println("请输入要删除的文件");
String deleteName = sc.next();
//从根目录开始递归 目录则递归 文件则判断是否删除
scanDir(file,deleteName);
}
private static void scanDir(File file, String deleteName) {
//列出当前文件要删除的内容
File[] files = file.listFiles();
//终止条件
if (files == null){
return;
}
//遍历结构
for (File f : files){
if (f.isDirectory()){
scanDir(f,deleteName);
}else {
if (f.getName().contains(deleteName)){
f.delete();
System.out.println("删除成功");
}
}
}
}
}
拷贝文件: