public class Test {
public static void main(String[] args) {
// 注意:这里的路径是以module为单位的,不是src这个目录,而是Test这个目录
File file = new File("hello.txt");
//相对路径
System.out.println(file.getAbsolutePath());
// 路径
System.out.println(file.getPath());
// 名字
System.out.println(file.getName());
// 父目录:如果写的是相对路径,则null
System.out.println(file.getParent());
// 长度
System.out.println(file.length());
// 最后修改时间
System.out.println(new Date(file.lastModified()));
File file2 = new File("C:\\Program Files\\");
// 当前目录的所有文件的名称
String[] list = file2.list();
for (String s : list) {
System.out.print(s);
}
// 返回目录中所有文件的File数组
File[] files = file2.listFiles();
for (File s : files) {
System.out.print(s);
}
}
}
public boolean isDirectory():判断是否是文件目录
public boolean isFile() :判断是否是文件
public boolean exists() :判断是否存在
public boolean canRead() :判断是否可读
public boolean canWrite() :判断是否可写
public boolean isHidden() :判断是否隐藏
public boolean createNewFile() :创建文件。若文件存在,则不创建,返回false
public boolean mkdir() :创建文件目录。如果此文件目录存在,就不创建了。如果此文件目录的上层目录不存在,也不创建。
public boolean mkdirs() :创建文件目录。如果此文件目录存在,就不创建了。如果上层文件目录不存在,一并创建
public boolean delete():删除文件或者文件夹。删除注意事项:Java中的删除不走回收站。
public boolean renameTo(File dest):把文件重命名为指定的文件路径
比如:file1.renameTo(file2)为例:
File fileD = new File("res");
File file1 = new File("res/test.txt");
if (!fileD.exists()){
/**
* 如果不存在,创建
*/
fileD.mkdirs();
System.out.println("文件夹res创建成功!");
}
if(!file1.exists()){
/**
* 创建文件
*/
file1.createNewFile();
System.out.println("文件test创建成功");
}else{
/**
* 重命名
*/
file1.renameTo(new File("res/new_name.txt"));
}
3.流的角色:节点流、处理流
==上面4种流,说的通俗一些,就是首先我们可以根据输入输出分成两类:Input和Output,然后输入和输出又可以选择是字符还是字节输入或者输出==
节点流:直接从数据源或目的地读写数据
处理流:不直接连接到数据源或目的地,而是“连接”在已存在的流(节点流或处理流)之上,通过对数据的处理为程序提供更为强大的读写功能
public class Test {
public static void main(String[] args) throws IOException {
// 1- 实例化文件对象
File file1 = new File("res/test.txt");
// 2- 提供具体使用的流, FileReader:输入流
FileReader fr = new FileReader(file1);
// 3- 数据读入
int len;
// 可以设置每次读的字符数
char[] cbuf =new char[50];
while ((len = fr.read(cbuf)) != -1){
// 方式一:使用String读取
String str = new String(cbuf,0,len);
System.out.print(str);
// 方式二:循环遍历读取cbuf
for (int i = 0; i < len; i++) {
System.out.print(cbuf[i]);
}
}
// 4- 关闭流
fr.close();
}
}
public class Test {
/**
* File对应的硬盘中的文件如果不存在,在输出的过程中,会自动创建此文件。
* File对应的硬盘中的文件如果存在:
* 如果流使用的构造器是:FileWriter(file,false) / FileWriter(file):对原有文件的覆盖
* 如果流使用的构造器是:FileWriter(file,true):不会对原有文件覆盖,而是在原有文件基础上追加内容
*/
public static void main(String[] args) throws IOException {
// 1- 实例化文件对象
File file1 = new File("res/rr.txt");
// 2- 提供具体使用的流, FileWriter:输出流
FileWriter fw = new FileWriter(file1,true);
// 3- 数据写出
fw.write("这是第一行\n");
fw.write("这是第二行\n");
// 4- 关闭流
fw.close();
}
}
结论:
1.缓冲流:
2.作用:
提高流的读取、写入的速度
提高读写速度的原因:内部提供了一个缓冲区
public class Test {
public static void main(String[] args) throws IOException {
/**
* 实现图片(非文本文件,即用字节的方式)的复制
*/
// 1- 造文件
File srcFile = new File("res/1.jpg");
File desFile = new File("res/2.jpg");
// 2- 造流
FileInputStream fis = new FileInputStream(srcFile);
FileOutputStream fos = new FileOutputStream(desFile);
BufferedOutputStream bos = new BufferedOutputStream(fos);
BufferedInputStream bis = new BufferedInputStream(fis);
// 3. 复制文件:读文件 和 写文件
byte[] buffer = new byte[10];
int len = 0;
while ((len = bis.read(buffer)) != -1){
bos.write(buffer,0,len);
}
// 4- 关闭资源:先关外面,再关里面(关闭外层,内层也会自动关闭)
bis.close();
bos.close();
}
}
public void test2() throws Exception {
//1.造文件、造流
File file1 = new File("dbcp.txt");
File file2 = new File("dbcp_gbk.txt");
FileInputStream fis = new FileInputStream(file1);
FileOutputStream fos = new FileOutputStream(file2);
InputStreamReader isr = new InputStreamReader(fis,"utf-8");
OutputStreamWriter osw = new OutputStreamWriter(fos,"gbk");
//2.读写过程
char[] cbuf = new char[20];
int len;
while((len = isr.read(cbuf)) != -1){
osw.write(cbuf,0,len);
}
//3.关闭资源
isr.close();
osw.close();
}
public class Test {
public static void main(String[] args) throws IOException, ClassNotFoundException {
oos();
ois();
}
public static void oos() throws IOException {
/**
* 将对象写入文件
*/
// 1- 造文件、对象流
ObjectOutputStream os = new ObjectOutputStream(new FileOutputStream("res/test.dat"));
// 2- 对象写入test.dat
os.writeObject(new String("我爱北京天安门"));
os.flush();
os.writeObject(new String("hello!"));
os.flush();
// 3- 关闭资源
os.close();
}
public static void ois() throws IOException, ClassNotFoundException {
/**
* 将文件中对象读出
*/
ObjectInputStream is = new ObjectInputStream(new FileInputStream("res/test.dat"));
Object obj = is.readObject();
String str = (String) obj;
System.out.println(str);
is.close();
}
}