1、File类
构造方法
public File(String pathname) //根据文件路径创建文件对象
public File(String parent,String child) //根据父路径名字符串和子路径字符串创建文件对象
public File(File parent,String child) //根据父路径对应的文件对象和子路径名字符串创建文件对象
// 常用方法
public boolean isDirectory() //判断此路径名表示的file是否为文件夹
public boolean isFile() //判断此路径名表示的File是否为文件
public boolean exists() //判断此路径表示的File是否存在
public static File[] listRoots() //获取所有盘符
public long length() //返回文件的大小
public String getAbsolutePath() //返回文件的绝对路径
public String getPath() //返回定义文件时使用的路径
public String getName() //返回文件名
public long lastModified() //返回文件最后修改时间
public boolean createNewFile() //创建一个新的空的文件夹
public boolean mkdir() //创建单级文件夹
public boolean mkdirs() //创建多级文件夹
public boolean delete() //删除空文件夹
public File[] listFiles() //获取当前路径下所有内容
例子:
public class FileDemo {
public static void main(String[] args) throws IOException {
// 使用相对路劲创建文件对象
File f = new File("D:\\kk");
f.mkdirs();//创建不存在的路劲(目录)
f=new File(f,"a.txt"); // 重新构造file
boolean isnew = f.createNewFile();// 创建空文件,文件存在返回false,不存在创建成功返回true
System.out.println("是不是文件"+f.isFile());
System.out.println("是不是文件夹"+f.isDirectory());
System.out.println("是否存在"+f.exists());
System.out.println("文件的大小"+f.length());
System.out.println("文件的绝对路劲"+f.getAbsolutePath());
System.out.println("文件的创建路劲"+f.getPath());
System.out.println("文件的最后修改时间"+new SimpleDateFormat("yyyy-MM-dd-HH-mm-ss").format(f.lastModified()));
System.out.println("文件名"+f.getName());
System.out.println("文件是否删除成功"+f.delete());//删除文件和空文件夹
f.createNewFile();// 删除后重新创建文件
// 获取D盘的所有资源
File f2 = new File("D://");
File[] files = f2.listFiles();
for (File file : files) {
System.out.println(file);
}
// 获取所有盘符名称
File[] listRoot = File.listRoots();
for (File root : listRoot) {
System.out.println(root);
}
}
}
2、IO流
2.1 字节流
2.1.1 输入流
(1) 字节输入流: FileInputStream:
// 创建一个字节输入流对象,文件路劲必须存在
FileInputStream fis = new FileInputStream("test.txt");
// 读取一个字节数据
int c = fis.read();
System.out.println((char) c);
//指针不会返回
fis= new FileInputStream("test.txt");
// 读取一个字节数组数据
byte[] bytes = new byte[1024];
int len = fis.read(bytes);
for (int i = 0; i < len; i++) {
System.out.print((char) bytes[i]);
}
fis= new FileInputStream("test.txt");
// 一直读取数据,直到数据读取完毕
int b;
while ((b=fis.read())!=-1){
System.out.print((char) b);
}
// 关闭输出流,相当于windows点击右上角的x
fis.close();
(2) 字节缓冲输入流(自带8192缓冲区):BufferedInputStream
public static void main(String[] args) throws IOException {
// 字节缓冲输入流
BufferedInputStream bis = new BufferedInputStream(new FileInputStream("test.txt"));
// 字节缓冲输入流
BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("test2.txt"));
byte[] bytes = new byte[1024];
int len;
// 通过字节数组读取
while ((len=bis.read(bytes))!=-1){
// 通过字节数组写出
bos.write(bytes,0,len);
}
}
(3) 数据输入:
public static void main(String[] args) throws IOException {
FileInputStream fileInputStream = new FileInputStream("text.txt");
DataInputStream dataInputStream = new DataInputStream(fileInputStream);
// 需要先写出数据使用DataOutputStream
// 读取整数
int intValue = dataInputStream.readInt();
System.out.println("整数值:" + intValue);
// 读取浮点数
double doubleValue = dataInputStream.readDouble();
System.out.println("浮点数值:" + doubleValue);
// 读取字符串
String stringValue = dataInputStream.readUTF();
System.out.println("字符串值:" + stringValue);
dataInputStream.close();
}
2.1.2 输出流
(1) 字节输出流: FileOutputStream:
// 创建字节输出流对象,如果文件不存在会创建新的文件,需要父路劲存在,
//如果父路劲不存在可以使用file对象创建,默认会清空文件,从头开始写,true为续写,默认为false
FileOutputStream fos = new FileOutputStream("test.txt",true);
// 写出数据
fos.write('a');
// 关闭输出流,相当于windows点击右上角的x
fos.close();
(2) 字节缓冲输出流:BufferedOutputStream
public static void main(String[] args) throws IOException {
// 字节缓冲输入流
BufferedInputStream bis = new BufferedInputStream(new FileInputStream("test.txt"));
// 字节缓冲输入流
BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("test2.txt"));
byte[] bytes = new byte[1024];
int len;
// 通过字节数组读取
while ((len=bis.read(bytes))!=-1){
// 通过字节数组写出
bos.write(bytes,0,len);
}
}
(3) 数据输出:
public static void main(String[] args) throws IOException {
FileOutputStream fileOutputStream = new FileOutputStream("text.txt");
DataOutputStream dataOutputStream = new DataOutputStream(fileOutputStream);
// 写入整数
int intValue = 10;
dataOutputStream.writeInt(intValue);
// 写入浮点数
double doubleValue = 3.14;
dataOutputStream.writeDouble(doubleValue);
// 写入字符串
String stringValue = "Hello DataOutputStream!";
dataOutputStream.writeUTF(stringValue);
dataOutputStream.close();
}
2.2 字符流
字符流 = 字节流+字符集
字节流一次读取一个字节,字符流会根据字符集,一次读取一个或多个字节
2.2.1Reader
(1) 字符输入流: FileReader:
public static void main(String[] args) throws IOException {
// 通过字符串路劲创建,字符输入流,指定编码
FileReader fr = new FileReader("test.txt",Charset.forName("UTF-8"));
//一次读取一个字符
int c = fr.read();
System.out.println((char) c);
// 一次读取一个字符数组
char [] cs = new char[10];
int len;
while ((len = fr.read(cs))!=-1){
for (int i = 0; i < len; i++) {
System.out.print((char) cs[i]);
}
}
fw.close();
}
(2) 字符缓冲输入流:BufferedReader
常用方法: readLine() 读取一行数据
BufferedReader br = new BufferedReader(new FileReader("test.txt"));
// 一次读取一行数据,读完返回null
String line = br.readLine();
System.out.println(line);
br.close();
2.2.2Writer
(1)字符输出流: FileWriter:
public static void main(String[] args) throws IOException {
FileWriter fw = new FileWriter("test.txt",Charset.forName("UTF-8"));
// 一次写出一个字符
fw.write('你');
// 一次写出一个字符数组
fw.write(new char[]{'你','好','你','好'});
fw.close();
}
(2) 字符缓冲输出流:BufferedWriter
常用方法: newLine() 换行
BufferedWriter bw = new BufferedWriter(new FileWriter("test2.txt"));
// 跨平台换行,不分系统
bw.newLine();
// 一次写入一个字符串
bw.write(line);
bw.close();
2.3 转换流
2.3.1 InputStreamReader
// 将字节输入流转换为字符输入流
FileInputStream fis = new FileInputStream("test.txt");
InputStreamReader isr = new InputStreamReader(fis,"UTF-8");
BufferedReader br = new BufferedReader(isr);
br.close();
2.3.2 OutputStreamWriter
//
FileOutputStream fos = new FileOutputStream("text2.txt");
OutputStreamWriter osw = new OutputStreamWriter(fos,"UTF-8");
BufferedWriter bw = new BufferedWriter(osw);
bw.close();
2.4 对象流
对象版本号属性(防止修改对象版本号变化,导致读取对象出错):
private static final long serialVersionUID=100000L;
瞬态关键字:transient
// 不会把describe序列化到本地
prvate transient String describe;
2.4.1 序列化流:ObjectOutputStream
将对象写入到本地文件中:
// 需要实现Serializable标记接口,才可序列化
student stu1 = new student("zhangsan", 23);
ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("text2.txt"));
oos.writeObject(stu1);
oos.close();
2.4.2 反序列化流ObjectInputStream
将对象读入到程序中:
ObjectInputStream ois = new ObjectInputStream(new FileInputStream("text2.txt"));
student o = (student)ois.readObject();
System.out.println(o);
2.5 打印流
2.5.1 字节打印流:PrintStream
PrintStream ps = new PrintStream(new FileOutputStream("text.txt"),true,"UTF-8");
ps.println(100);
ps.print(101);
ps.write(88);
ps.close();
2.5.2 字符打印流
···java
PrintWriter pw = new PrintWriter(new FileWriter(“text.txt”),true);
pw.print(“你好你好”);
pw.println(“明天会更好”);
pw.close();
···
输出语句:System.out.println();
System.out => 获取到指向控制台的打印流
println() => 打印流方法
System.in => 获取从控制台接收用户的输入的标准流
PrintStream p = System.out;
p.println();
2.5 解压缩流
2.5.1 解压流: ZipInputStream
File f = new File("D:\\test.zip");
// 获取压缩中的文件
ZipInputStream zip = new ZipInputStream(new FileInputStream(f));
// 获取压缩包中的文件对象,获取完后返回null
ZipEntry zipEntry = zip.getNextEntry();
System.out.println(zipEntry);
2.5.2 压缩流:ZipOutputStream
File f = new File("D:\\test.txt");
ZipOutputStream zo = new ZipOutputStream(new FileOutputStream(new File("D:\\",f.getName().split("\\.")[0]+".zip")));
// 创建一个压缩文件对象
ZipEntry entry = new ZipEntry(f.getName());
// 将压缩文件对象,添加到压缩包中
zo.putNextEntry(entry);
FileInputStream fis = new FileInputStream(f);
int b;
while ((b=fis.read())!=-1){
zo.write(b);
}
zo.closeEntry();
zo.close();