一、File类
1.File类是java.io包中很重要的一个类
2.File类的对象可以表示文件和目录(文件夹),在程序中一个File类对象可以代表一个文件或目录
3.File对象可以对文件或目录的属性进行操作,如:文件名、最后修改日期、文件大小等
4.File对象无法操作文件的具体数据,即不能直接对文件进行读/写操作
相对路径:不是全路径,是两个文件的相对同一个父级的路径
绝对路径:完整的路径
File类的构造方法:
File file = new File("D:/demo.txt");
File file1 = new File("D:/","demo.txt");
File类的常用方法:
方法实现:
package com.ffyc.javaio.file;
import java.io.File;
import java.io.IOException;
import java.util.Date;
public class FileDemo {
public static void main(String[] args) {
File file = new File("D:/demo2.txt");
System.out.println(file.getAbsolutePath());//查找绝对路径
System.out.println(file.getParent());//获得父级
System.out.println(file.canRead());//文件是否可读
System.out.println(file.canWrite());//文件是否可写
System.out.println(file.length());//获取文件内容的长度(以字节为单位)
System.out.println(file.lastModified());//获得文件最后的修改时间
System.out.println(new Date(1657510749339l));//转换我们能看懂的时间
System.out.println(file.exists());//文件是否存在
if(!file.exists()){
try {
file.createNewFile();
} catch (IOException e) {
e.printStackTrace();
System.out.println("文件路径不合法");
}
}
System.out.println(file.isFile());//判断表示的是否是文件
System.out.println(file.isDirectory());//判断是否是文件夹(目录)
System.out.println(file.delete());//删除成功是true,删除失败为false
File file1 = new File("D:/demo3");
file1.mkdir();//创建单级目录(文件夹)
File file2 = new File("D:/demo1/deno2/demo3");
file2.mkdirs();//创建多级目录(文件夹)
file2.delete();//只能删除最底层的目录,必须为空才能删
}
}
比较重要的方法:list();和listFiles();
list()返回的是一个String类型数组,它只是一个数组,仅仅只是一个文件(文件夹)的名字而已;
而listFiles()方法返回的是一个File类的引用,它具有类的所有属性和方法
package com.ffyc.javaio.file;
import java.io.File;
public class FileDemo1 {
public static void main(String[] args) {
File f1 = new File("D:/ceshi");
String []a = f1.list();//获得某个目录中所有的子集目录/文件,返回的是文件名
for (String name : a){
System.out.println(name);
}
File [] b = f1.listFiles();//获得某个目录中所有的子集目录/文件,返回对象(File)
for (File f : b){
System.out.println(f);
f.delete();
}
}
}
package com.ffyc.javaio.file;
import java.io.File;
import java.io.FilenameFilter;
public class FileDemo1 {
public static void main(String[] args) {
File f1 = new File("D:/ceshi");
/* f1.listFiles(new FilenameFilter() {
@Override
public boolean accept(File dir, String name) {
return false;
}
});//匿名类部类
*/
File []fs = f1.listFiles(new MyFileFiler());
for (File f : fs){
System.out.println(f);
}
}
}
//自己搞一个类:
/*
package com.ffyc.javaio.file;
import java.io.File;
import java.io.FilenameFilter;
public class MyFileFiler implements FilenameFilter {
@Override
public boolean accept(File dir, String name) {
return name.endsWith("txt");
}
}
*/
二、 输入及输出的概念
输入和输出是相对于程序的
输入输出(I/O) 把电脑硬盘上的数据读到程序中,称为输入,即input,进行数据 的read 操作从程序往外部设备写数据,称为输出,即output,进行数据的write 操作
三、输入流与输出流
IO流:
流--读写文件的操作类
类按照操作不同,单位不同分为:
(1)字节流
字节输入流:InputStream read();
字节输出流:OutputStream write();
每次读取数据时,是以字节为单位,一次读一个字节(可以读取任何文件)
(2)字符流
字符输入流:Reader read();
字符输出流:Writer write();
每次读取数据时,是以字符为单位(只适合读文本文件,例.txt, .java,不能插图片,表格)
按照传出方向:
(1)输入流
往程序中读叫输入流
(2)输出流
从程序中往外写叫输出流
● InputStream和OutputStream的子类都是字节流 可以读写二进制文 件,主要处理音频、图片、歌曲、字节流,处理单元 为1个字节。
● Reader和Writer的子类都是字符流 主要处理字符或字符串,字符流处 理单元为1个字符。 字节流将读取到的字节数据,去指定的编码表中获取 对应文字
package com.ffyc.javaio.file;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
public class StreamDemo {
public static void main(String[] args) throws IOException {
FileInputStream f = new FileInputStream("C:/kms10.log");
/*
int a =0;
while((a =f.read())!=-1){
System.out.println(a);
}
*/
FileOutputStream f1 = new FileOutputStream("D:/demo1.txt");
int a = 0;
while((a =f.read())!=-1){
f1.write(a);
}
}
}
完善:
package com.ffyc.javaio.file;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
public class StreamDemo1 {
public static void main(String[] args) throws IOException {
FileInputStream f1 = null;
FileOutputStream f2 = null;
try {
f1 = new FileInputStream("C:/kms10.log");
f2 = new FileOutputStream("D:/demo2.txt");
byte []a = new byte[100];
int size = 0;
while((size = f1.read(a))!=-1){
f2.write(a,0,size);
}
} catch (FileNotFoundException e) {
e.printStackTrace();
System.out.println(e.getMessage());
}finally {
if(f1!=null) {
f1.close();
}
if(f2!=null){
f2.close();
}
}
}
}