IO操作
一、IO流技术
stream 流是一种抽象概念,它代表了数据的无结构化传递。按照流的方式进行输入输出,数据被 当成无结构的字节序或字符序列。从流中取得数据的操作称为提取操作,而向流中添加数据的操作称为 插入操作。用来进行输入输出操作的流就称为IO流。换句话说,IO流就是以流的方式进行输入输出(读取 写入)。
流是一组有顺序的,有起点和终点的字节集合,是对数据传输的总称或抽象。即数据在两设备间的 传输称为流,流的本质是数据传输,根据数据传输特性将流抽象为各种类,方便更直观的进行数据操 作。
二、File类
java中我们通过java.io.File类实现对文件的基本属性进行操作,包括文件属性读取,文件创建,文 件删除,文件添加等等。File是一个类,那么在使用的时候就需要创建对象,但是File类的实例是不可变 的,也就是说,一旦创建,由File对象表示的抽象路径名将永远不会改变,也就是说利用构造方法,指定 路径名、文件名等来构造File类的对象,之后调用该对象的createNewFile()方法就可以创建出相应的文 件。
File类的对象可以代表一个具体的文件路径,在实际运用种,可以使用绝对路径也可以使用相对路 径,下面是创建文件对象实例
例子:
import java.io.File;
public class FileTestDemo {
public static void main(String[] args) {
String path = "dat";
File file = new File(path);
System.out.println(file.mkdir());//在当前项目的根目录建立dat目录
//.isDirectory()判断File对象是不是目录,如果不存在返回false,如果存在是文件,返回false
System.out.println(file.isDirectory());
//在d盘下建立d:/abcxaaa/user/shop/images/
File ds = new File("d:/abcxaaa/user/shop/images/");
if(!ds.exists()){
ds.mkdirs();
}
}
}
三、文件的操作(输出路径、名称、基本名称、扩展名、删除、修改、读取、建立)
import java.io.File;
public class File3 {
public static void main(String[] args) {
File file = new File("c.txt");
System.out.println(file.isFile());//是不是文件 //true
System.out.println(file.length());//文件的长度 //190
System.out.println(file.exists());//是否存在 //true
System.out.printf("%tF %<tT%n",file.lastModified());//2022-09-21 20:18:28
System.out.println(file.getName());//c.txt //得到文件名
System.out.println(file.getPath());//c.txt //文件路径
System.out.println(file.getAbsolutePath());//D:\idea project\project\c.txt //文件的绝对路径
//文件目录
String t = file.getAbsolutePath();
System.out.println(t.substring(0,t.lastIndexOf("\\")));//D:\idea project\project
//文件基本名
System.out.println(t.substring(t.lastIndexOf("\\") + 1,t.lastIndexOf(".")));//c
//文件扩展名
System.out.println(t.substring(t.lastIndexOf(".")));//.txt
//更改文件名为 uuuuu.txt
file.renameTo(new File("uuuuu.txt"));
//更改文件位置到 d:/ABC 并修改文件名为 xyz.txt
File ff = new File("uuuuu.txt");
ff.renameTo(new File("d:/ABC/xyz.txt"));
//删除文件
File f3 = new File("d:/ABC/xyz.txt");
//如果xyz是文件且存在
if(f3.isFile()&&f3.exists()){
//删除
f3.delete();
}
}
}
import java.io.*;
public class File2 {
public static void main(String[] args) throws Exception {
//读取文本文件
//字节流
File file = new File("c.txt");
FileInputStream fis = new FileInputStream(file);
System.out.println(new String(fis.readAllBytes()));
//字符流
FileReader reader = new FileReader(file);
BufferedReader br = new BufferedReader(reader);
while (br.ready()){
System.out.println(br.readLine());
}
}
}
import java.io.File;
import java.io.FileOutputStream;
import java.io.FileWriter;
import java.io.PrintWriter;
public class File1 {
public static void main(String[] args) throws Exception {
//建立一个空文件
File f1 = new File("a.txt");
f1.createNewFile();
//建立文件并写入内容
PrintWriter out = new PrintWriter("b.txt");
out.write("hello 中文\n");
out.printf("%tF %<tF%n",System.currentTimeMillis());
out.flush();
//字节流写入文件
FileOutputStream fos = new FileOutputStream("c.txt",true);
for(int i=0; i<10; i++) {
fos.write("87 - hello 文件\r\n".getBytes());
}
fos.close();
//字符流
FileWriter fw = new FileWriter("d.txt");
fw.write("hello程序设计");
fw.close();
}
}
四、目录操作(建立目录 删除目录 删除非空目录 遍历目录)
import java.io.File;
public class FileTestDemo {
public static void main(String[] args) {
String path = "dat";
File file = new File(path);
System.out.println(file.mkdir());//在当前项目的根目录建立dat目录
//.isDirectory()判断File对象是不是目录,如果不存在返回false,如果存在是文件,返回false
System.out.println(file.isDirectory());
//在d盘下建立d:/abcxaaa/user/shop/images/
File ds = new File("d:/abcxaaa/user/shop/images/");
if(!ds.exists()){
ds.mkdirs();
}
}
}
import java.io.File;
import java.util.Arrays;
public class FileTestDemo2 {
public static void main(String[] args) {
File dir = new File("d:/ABC");
System.out.println(dir.exists());//判断ABC是否存在//true
System.out.println(dir.isDirectory());//判断是不是目录//true
//方法一
String[] ds = dir.list();
for(String d : ds) {
System.out.println(d);
}//遍历目录ABC中的文件
//.git .gitignore .idea jihefanxing.txt out project8.25.iml src
//方法二
File[] fs = dir.listFiles();
for(File f : fs) {
System.out.println(f.getName()+(f.isFile()?"文件":"目录"));
//.git目录 .gitignore文件 .idea目录 jihefanxing.txt文件 out目录 project8.25.iml文件 src目录
}
System.out.println("---------------------------------");
String[] ds2 = dir.list((a,b)->true);
//(a,b)->返回布尔值 a代表dir目录 b代表目录中的子元素的名称字符串
System.out.println(Arrays.toString(ds2));
//true返回[.git, .gitignore, .idea, jihefanxing.txt, out, project8.25.iml, src]
//flase返回[]为空
System.out.println("-----------------");
String[] ds3 = dir.list((a,b)-> b.endsWith(".txt"));
//搜索以...结尾的文件
System.out.println(Arrays.toString(ds3));
//[gyfyajshd.txt, jihefanxing.txt, sfadhjgas.txt]
for(String s:ds3){
System.out.println(s);
}//gyfyajshd.txt jihefanxing.txt sfadhjgas.txt
System.out.println("-------------------------");
File[] fs2 = dir.listFiles(f>f.isFile()&&f.getName().endsWith(".java"));
for(File f:fs2){
System.out.println(f.getName());
}
}
}
import java.io.File;
public class FileTestDemo3 {
public static void main(String[] args) {
String dst = "d:/ABC";
File f = new File(dst);
del(new File("d:\\ABC"));
// if(f.exists()&&f.isDirectory()) {
// //此方法只能删除空目录,不能删除有东西的目录
// System.out.println(f.delete());
// }
}
public static void del(File dir){
if(dir.isDirectory()){
File[] files = dir.listFiles();
for(File f : files){
if(f.isDirectory()) {
del(f);
}
f.delete();
}
}
dir.delete();
}
}