file
file的一些方法
获取文件长度(获取的是文件的字节数)
private static void fun1() {
File file1=new File("/Users/lanou/Desktop/Test/haha1.txt");
//mac下 一个英文字符1个字节 中文字符3个字节
long num=file1.length();
System.out.println(num);
}
删除一个文件夹(如果删除文件夹 文件夹中不能有东西)
public void deleteFile(File file) {
File[] files = file.listFiles();
for (File file2 : files) {
if (file2.isDirectory()) {
file2.delete();
}else {
deleteFile(file2);
}
}
file.delete();
}
文件过滤器(FileFileter)
1.实现接口及方法
2.调用listFiles(FileFilter filter)方法
3.打印查看测试结果
private static void fun1() {
File file = new File("/Users/lanou/Desktop/Test");
File[] files = file.listFiles(new MyFilter());
for (File subFile : files) {
System.out.println(subFile);
}
}
class MyFilter implements FileFilter{
/*
* 该方法返回true会把所有文件装到数组中
* 返回false不会装进数组里
* 该方法的参数是文件夹中所有的文件路径
* 作用:过滤掉你不需要的文件
*/
@Override
public boolean accept(File pathname) {
//获取所有文件路径(绝对的)
//System.out.println(pathname);
//过滤文件夹(是文件夹就返回false)
if (pathname.isDirectory()) {
return false;
}
return true;
}
}
文件过滤器(FileNameFileter)
private static void fun2() {
File file = new File("/Users/lanou/Desktop/Test");
File[] files = file.listFiles(new MyFilenameFilter());
for (File subfile : files) {
System.out.println(subfile);
}
}
class MyFilenameFilter implements FilenameFilter{
@Override
public boolean accept(File dir, String name) {
//dir 是文件夹父路径的文件
//name 是子路径(文件名字) 是个字符串
File file =new File(dir, name);
System.out.println(dir);
System.out.println(name);
return false;
}
}
流
(字节流 以字节为单位进行数据的传输)
以参照物来衡量是输出还是输入
流的参照物(程序)
输出流
程序-->文件(写文件使用输出流)
输入流
文件-->程序(读文件使用输入流)
OutputSteam 字节输出流
InputSteam 字节输入流
以上两个抽象类是所有字节流的父类
OutputSteam 字节输出流
private static void fun1() throws FileNotFoundException, IOException {
//创建File(给输出流绑定一个输出文件)
//给出路径 可以没有该文件(系统会帮你创建出来)
File file=new File("/Users/lanou/Desktop/Test/hh.txt");
//创建文件字节输出流
FileOutputStream fos=new FileOutputStream(file);
//写文件
//注意:流这块全是抛的IOException
//传入int值的方法 是按ASCII码输入
//一次写入一个字节
fos.write(65);
//创建一个字节数组
byte[] b= {66,67,68,69};
fos.write(b);
//直接写字符串
//字符串转字节数组 getBytes();
//字节数组转字符串 字符串的构造方法
fos.write("haha1".getBytes());
fos.write(b, 1, 2);//1表示偏移量,2表示长度
//关闭资源
fos.close();
}
InputSteam 字节输出流
private static void fun1() throws IOException {
File file=new File("/Users/lanou/Desktop/Test/hh.txt");
FileInputStream fis=new FileInputStream(file);
//读文件
int num = fis.read();
System.out.println((char)num);
num = fis.read();
System.out.println((char)num);
num = fis.read();
System.out.println((char)num);
num = fis.read();
System.out.println((char)num);
num = fis.read();
System.out.println((char)num);
num = fis.read();
//如果读取到文件没有字符了 返回-1
System.out.println(num);
num = fis.read();
System.out.println(num);
//关闭资源
fis.close();
}
循环读取(一次只能读一个字节)
private static void fun2(FileInputStream fis) throws IOException {
File file=new File("/Users/lanou/Desktop/Test/hh.txt");
FileInputStream fis=new FileInputStream(file);
int num=0;
while ((num=fis.read())!=-1) {
System.out.println((char)num);
}
fis.close();
}
一次多读几个字节
private static void fun3(FileInputStream fis) throws IOException {
File file=new File("/Users/lanou/Desktop/Test/hh.txt");
FileInputStream fis=new FileInputStream(file);
//在hh.txt文件中输入ABCDE
//一次多读几个字节
//创建一个空的字节数组 长度2
//把文件中字节读进这个数组中
//一次读俩 提高效率(一般一次1kb=1024)
byte[] b =new byte[2];
//返回是读取的有效位数
int len = fis.read(b);
System.out.println(Arrays.toString(b));// AB,打印出A和B的ASCII码值
System.out.println(len);// 2,指向2个字节
len = fis.read(b);
System.out.println(Arrays.toString(b));// CD
System.out.println(len);// 2
len = fis.read(b);
System.out.println(Arrays.toString(b));// ED
System.out.println(len);// 1
len = fis.read(b);
System.out.println(Arrays.toString(b));// ED
System.out.println(len);// -1
}