目录
1. File 概述
Java 中通过 java.io.File 类来对⼀个文件(包括目录)进行抽象的描述。注意,有 File 对象, 并不代表真实存在该文件。
1.1 File的属性
1.2 File的构造方法
1.3 File的方法
使用示例
getParent(),getName(),getPath(),getAbsolutePath(),getCanonicalPath()
import java.io.File;
import java.io.IOException;
public class Demo {
public static void main(String[] args) throws IOException {
File file = new File("D:/Java/test.txt");
System.out.println(file.getName()); //获取文件名字
System.out.println(file.getParent()); //获取文件的父目录
System.out.println(file.getPath()); //获取文件路径
System.out.println(file.getAbsolutePath()); //获取文件的绝对路径
System.out.println(file.getCanonicalPath()); //获取文件的规范路径
}
}
exists(),isDirectory(),isFile(),createNewFile()
createNewFile(): 根据 File 对象,自动创建⼀个空文件。成功创建后返回 true
import java.io.File;
import java.io.IOException;
public class Demo2 {
public static void main(String[] args) throws IOException {
File file = new File("D:/Java/test.txt");
System.out.println(file.exists());
System.out.println(file.isFile());
System.out.println(file.isDirectory());
boolean ret = file.createNewFile();
System.out.println("ret = " + ret);
System.out.println(file.exists());
System.out.println(file.isFile());
System.out.println(file.isDirectory());
}
}
delete(),deleteOnExit()
delete():根据 File 对象,删除该文件。成功删除后返回 true
import java.io.File;
public class Demo3 {
public static void main(String[] args) throws InterruptedException {
File file = new File("D:/Java/test.txt");
boolean ret = file.delete();
System.out.println("ret = " + ret);
}
}
deleteOnExit():根据 File 对象,标注文件将被删除,删除动作会到 JVM 运⾏结束时才会进行 。
public static void main(String[] args) throws InterruptedException {
File file = new File("D:/Java/test.txt");
//等程序结束后再删除文件
file.deleteOnExit();
Thread.sleep(3000);
}
list(),listFiles()
list():返回 File 对象代表的目录下的所有文件名
public class Demo4 {
public static void main(String[] args) {
File file = new File("D:/Java/");
String[] files = file.list();
System.out.println(Arrays.toString(files));
}
}
listFiles():返回 File 对象代表的目录下的所有⽂件,以 File 对象表示 。
public class Demo4 {
public static void main(String[] args) {
File file = new File("D:/Java/");
File[] files = file.listFiles();
System.out.println(Arrays.toString(files));
}
}
mkdir(),mkdirs()
mkdir():创建 File 对象代表的目录
public class Demo5 {
public static void main(String[] args) {
File file = new File("D:/Java/aaa");
boolean ret = file.mkdir();
System.out.println(ret);
}
}
mkdirs():创建 File 对象代表的目录,如果必要,会创建中间目录
public class Demo5 {
public static void main(String[] args) {
File file = new File("D:/Java/aaa/bbb/ccc/ddd");
boolean ret = file.mkdirs();
System.out.println(ret);
}
}
renameTo(File dest):进行文件改名,也可以视为我们平时的剪切、粘贴操作
修改文件名:
public class Demo5 {
public static void main(String[] args) {
File src = new File("./test.txt");
File dest = new File("./test2.txt");
boolean ret = src.renameTo(dest);//重命名和移动目录
System.out.println(ret);
}
}
修改路径:
public static void main(String[] args) {
File src = new File("./test2.txt");
File dest = new File("./aaa/test2.txt");
boolean ret = src.renameTo(dest);//重命名和移动目录
System.out.println(ret);
}
2. 文件的基本操作
文件的读写,针对文本文件JAVA提供了一组类,称为字符流(典型代表 Reader(输入流),Writer (输出流)) 读写的基本单位是字符~
针对二进制文件 提供了一组类 称为字节流(典型代表 inputStream,(输入流)OutputStream( 输出流)) 读写的基本单位是字节~
2.1 InputStream
基本方法: read() :读取一个字节的数据,返回-1代表读取完毕
read(byte[] b) :最多读取b.lenth的字节的数据到b,返回实际读到的数量,-1代表读取完毕
read(byte[] b, int off, int len) :最多读取,len-off 字节的数据到b 中,放在从off开始的下标 -1代表读取完毕
由于inputStream是个抽象类,不能直接实例化,里面的类有很多,这里我们只用文件操作,使用 FileInputStream 来实例化~
public class IODemo6 {
//事先在目录中准备了文件,内容为abc
public static void main(String[] args) throws IOException { //使当前对象和硬盘上的文件关联起来
try(InputStream inputStream=new FileInputStream("d:/test.txt")) { //相当于打开文件,如果不存在就抛出异常
while (true) { //try代码块的作用可以在代码块结束的时候自动执行close操作
int ret = inputStream.read(); //读取文件,一次读取一个字节,一直到文件读取结束返回-1 这里使用int接收
if (ret == -1) { // (需要-1来确定是否读取完)
break;
}
System.out.printf("%s\n",ret);
}
}
// inputStream.close(); //有打开就要有关闭操作~ 如果不关闭,文件描述符如果超出上限就会发生严重BUG
}
}
2.2 OutputStream
为字节流写操作~
方法:
wirte(int b):写入要给字节的数据
write(byte[] b) :将字节数组b的所有内容全部写入
write(byte[] b, int off, int len):将b这个数组从off开始写,一共写入len个
flush() :刷新操作,将数据刷入到设备中
写入abc~
import java.io.*;
public class Demo6 {
public static void main(String[] args) {
try(OutputStream outputStream=new FileOutputStream("d:/test.txt")){
outputStream.write(97); //一个字节一个字节的写入文件
outputStream.write(98);
outputStream.write(99);
outputStream.flush();
} catch (IOException e) {
e.printStackTrace();
}
}
}
2.3.字符流读取(Reader)
使用方法和上面的方法一样~ 这里就直接写入代码~
import java.io.*;
public class Demo6 {
public static void main(String[] args) {
try(Reader reader=new FileReader("d:/test.txt")){ //try可以自动close
while (true){
int ret=reader.read();
if(ret==-1){
break;
}
char ch=(char)ret;
System.out.println(ch);
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
代码基本是一样的,就是读取的单位变成了一次读取一个字符~
2.4 字符流写(Writer)
import java.io.*;
public class Demo6 {
public static void main(String[] args) {
try(Writer writer=new FileWriter("d:/text.txt")){
writer.write("abdc"); //字符流输入
writer.write("efg");
writer.write("hig");
} catch (IOException e) {
e.printStackTrace();
}
}
}
这样就可以实现字符流写入了~。