一、 File: 是所有文件或者文件夹的路径抽象表现形式
file自动重写了toString方法,所以直接打印显示的是file内容
构造方法:
public File(String pathname)
public File(String parent,String child)
public File(File parent,String child)
参考用法:
public class FileDemo1 {
public static void main(String[] args) {
// 将未来要操作的路径封装成File对象
/*
路径:
绝对路径(完整路径):指的是带有盘符的路径【在windows】
举例:D:\projects\IDEAProjects\bigdata31-java\src\day16\data\a.txt
相对路径:相对于该项目而言,将该项目作为开始
举例:src/day16/data/a.txt
*/
//public File(String pathname)
File file = new File("D:\\projects\\IDEAProjects\\bigdata31-java\\src\\day16\\data\\a.txt");
System.out.println(file);
File file2 = new File("src/com/shujia/day16/data/a.txt");
System.out.println(file2);
//public File(String parent,String child)
File file3 = new File("D:\\projects\\IDEAProjects\\bigdata31-java\\src\\day16\\data","a.txt");
System.out.println(file3);
//public File(File parent,String child)
File file4 = new File(new File("D:\\projects\\IDEAProjects\\bigdata31-java\\src\\day16\\data"),"a.txt");
System.out.println(file4);
}
}
File类中的成员方法如下:
创建功能
public boolean createNewFile()
public boolean mkdir()
public boolean mkdirs()
删除功能
public boolean delete()
重命名功能
public boolean renameTo(File dest)
参考用法:
public class FileDemo2 {
public static void main(String[] args) throws Exception{
//D:\bigdata31\day16\shujia.txt
File file = new File("D:\\bigdata31\\day16\\shujia.txt");
//public boolean createNewFile() 创建一个文件 若文件已经存在,返回false,否则创建文件返回true
System.out.println(file.createNewFile());
//public boolean mkdir() 创建单级目录
File file1 = new File("D:\\bigdata31\\day16\\aaa\\bbb\\ccc");
System.out.println(file1.mkdir());
System.out.println(file1.createNewFile());
System.out.println(file1.mkdir());
//public boolean mkdirs() 创建多级目录
System.out.println(file1.mkdirs());
// public boolean delete() 既可以删除某一个文件也可以删除单级文件夹
File file2 = new File("D:\\bigdata31\\day16\\bbb");
System.out.println(file2.delete());
File file3 = new File("D:\\bigdata31\\day16\\aaa");
System.out.println(file3.delete());
//public boolean renameTo(File dest) 对文件或者文件夹重命名
File file4 = new File("D:\\bigdata31\\day16\\小小.txt");
System.out.println(file.renameTo(file4));
}
}
判断功能
public boolean isDirectory() 是否是文件夹
public boolean isFile() 是否是文件
public boolean exists() 是否存在
public boolean canRead() 是否可读
public boolean canWrite() 是否可写
public boolean isHidden() 是否被隐藏
参考用法:
public class FileDemo3 {
public static void main(String[] args) {
File file4 = new File("D:\\bigdata31\\day16\\魏一民.txt");
//public boolean isDirectory() 是否是文件夹
System.out.println(file4.isDirectory());
//public boolean isFile() 是否是文件
System.out.println(file4.isFile());
//public boolean exists() 是否存在
System.out.println(file4.exists());
//public boolean canRead() 是否可读
System.out.println(file4.canRead());
//public boolean canWrite() 是否可写
System.out.println(file4.canWrite());
//public boolean isHidden() 是否被隐藏
System.out.println(file4.isHidden());
}
}
基本获取功能
public String getAbsolutePath() 获取完整路径
public String getPath() 获取相对路径
public String getName() 获取文件或者文件夹的名字
public long length() 获取文件内容字节数
public long lastModified() 最近一次修改时间 获取的是毫秒级别的时间戳
参考如下:
public class FileDemo4 {
public static void main(String[] args) {
File file = new File("src/com/shujia/day16/data/a.txt");
System.out.println(file.getAbsolutePath()); // 获取完整路径
System.out.println(file.getPath()); // 获取相对路径
System.out.println(file.getName()); // 获取文件或者文件夹的名字
System.out.println(file.length()); // 获取文件内容字节数
File file1 = new File("D:\\bigdata31\\day16\\哈哈.txt");
long l = file1.lastModified(); // 最近一次修改时间 获取的是毫秒级别的时间戳
Date date = new Date(l);
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy年MM月dd日, HH:mm:ss");
String time = simpleDateFormat.format(date);
System.out.println("上一次修改时间:"+time);
}
}
高级获取功能
public String[] list() 列出当前目录下所有的文件及文件夹的名称,组成的数组
public File[] listFiles() 列出当前目录下所有的文件及文件夹的File对象
参考如下:
public class FileDemo5 {
public static void main(String[] args) {
File file = new File("src/com/shujia/day16");
//public String[] list() 列出当前目录下所有的文件及文件夹的名称,组成的数组
String[] names = file.list();
System.out.println(Arrays.toString(names));
System.out.println("--------------------------");
//public File[] listFiles() 列出当前目录下所有的文件及文件夹的File对象
File[] files = file.listFiles();
// 断言
assert files!=null;
for (File file1 : files) {
System.out.println(file1);
}
if(files!=null){
for (File file1 : files) {
System.out.println(file1);
}
}
}
}
二、 字节输入流:FileInputStream
构造方法:
FileInputStream(File file)
FileInputStream(String name)
参考使用:
public class FileInputStreamDemo1 {
public static void main(String[] args) throws Exception{
//FileInputStream(File file) 将要进行读取的文件封装成File对象放入到构造方法
//输入必须要求目标文件要已经存在,不然报错
File file = new File("src/day16/data/a3.txt");
FileInputStream fis = new FileInputStream(file);
//FileInputStream(String name)
FileInputStream fis = new FileInputStream("src/day16/data/a3.txt");
fis.close();
}
}
FileInputStream读数据的方法:
public int read()
public int read(byte[] b)
参考使用:
public class FileInputStreamDemo2 {
public static void main(String[] args) throws Exception {
//创建字节输入流对象
FileInputStream fis = new FileInputStream("src/com/shujia/day16/data/a3.txt");
//public int read() // 一次只读取一个字节
System.out.println((char) fis.read());
System.out.println((char) fis.read());
System.out.println((char) fis.read());
System.out.println((char) fis.read());
System.out.println(fis.read());
int i = 0;
while ((i = fis.read()) != -1) {
System.out.print((char) i);
}
//public int read(byte[] b)
//创建一个字节数组
byte[] bytes = new byte[1024];
int length = fis.read(bytes); // 返回的是实际读取到的字节数
//字节数组转字符串
String s = new String(bytes,0,length);
System.out.println(s);
byte[] bytes = new byte[2];
//第一次读
int length = fis.read(bytes); // 返回的是实际读取到的字节数
//字节数组转字符串
String s = new String(bytes,0,length);
System.out.print(s);
//第二次读
int length2 = fis.read(bytes); // 返回的是实际读取到的字节数
//字节数组转字符串
String s2 = new String(bytes,0,length2);
System.out.print(s2);
//第三次读
int length3 = fis.read(bytes); // 返回的是实际读取到的字节数
//字节数组转字符串
String s3 = new String(bytes,0,length3);
System.out.print(s3);
//使用while循环读取
byte[] bytes = new byte[1024];
int length = 0;
while ((length = fis.read(bytes)) != -1) {
String s = new String(bytes, 0, length);
System.out.print(s);
}
//释放资源
fis.close();
}
}
三、 字节输出流:FileOutputStream
FileOutputStream:
构造方法:
FileOutputStream(File file)
FileOutputStream(String name)
参考方法:
public class FileOutputStreamDemo1 {
public static void main(String[] args) throws Exception{
//FileOutputStream(File file) 需要先将目标文件封装成一个File对象放入到构造方法
// File file = new File("src/day16/data/a2.txt");
// //若写入的目标文件不存在的话,会自动创建一个
// FileOutputStream fos = new FileOutputStream(file);
//FileOutputStream(String name)
FileOutputStream fos = new FileOutputStream("src/day16/data/a2.txt");
System.out.println(fos);
}
}
FileOutputStream写数据的方法:
public void write(int b)
public void write(byte[] b)
public void write(byte[] b,int off,int len)
参考使用:
public class FileOutputStreamDemo2 {
public static void main(String[] args) {
FileOutputStream fos = null;
try {
fos = new FileOutputStream("src/com/shujia/day16/data/a3.txt");
//public void write(int b)
//写一个字节
// fos.write(97);
// fos.write(98);
// fos.write(99);
// fos.write(100);
//public void write(byte[] b) // 一次写一个字节数组
byte[] bytes = {97, 98, 99, 100, 101, 102, 103};
// fos.write(bytes);
//public void write(byte[] b,int off,int len) 一次写字节数组的一部分
fos.write(bytes,2,3);
} catch (Exception e) {
e.printStackTrace();
} finally {
//释放写数据资源
if (fos != null) {
try {
fos.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}
1、怎么实现追加写?
2、怎么实现换行?
参考使用:
public class FileOutputStreamDemo3 {
public static void main(String[] args) throws Exception {
//若文件已经存在,会将文件中的内容清空,若想要实现追加,在传入路径之后,append属性给true
FileOutputStream fos = new FileOutputStream("src/com/shujia/day16/data/a3.txt",true);
fos.write("\r\n".getBytes());
fos.write(110);
fos.write(111);
fos.write(112);
fos.close();
//释放资源之后无法再继续使用了
// fos.write(113);
}
}
四、缓冲(字节)输入输出流:
缓冲(字节)输入流:BufferedInputStream
创建对象的方式:BufferedInputStream bis = new BufferedInputStream(new FIleInputStream("路径"))
特点:
缓冲(字节)输出流:BufferedOutputStream
创建对象的方式: BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("路径"))
特点:
五、字符输入和输出流
抽象父类:(输入父类)Reader、(输出父类)Writer
字符输入流的具体实现子类和用法:
字符输入流:InputStreamReder
字符缓冲(输入)流的具体实现子类和用法:
缓冲流:BufferedReder
字符输出流的具体实现子类和用法:
字符输出流:InputStreamWriter
注意:简化版后的字符缓冲输出流,就不能添加或设定字符集,有没有append属性来添加true
缓冲流:BufferedWriter