文件操作: File 类的用法和 InputStream, OutputStream 的用法
目录
1. File 概述
1.1 File的属性
1.2 File的构造方法
1.3 File的方法
2. 文件的基本操作
2.1 InputStream
2.2 OutputStream
2.3.字符流读取(Reader)
2.4 字符流写(Writer)
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 {//事先在目录中准备了文件,内容为abcpublic 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可以自动closewhile (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();}}
}
这样就可以实现字符流写入了~。