参数1:父路径的File对象 new File(“D:\resource”) 参数2:子路径的字符串 “a.txt” 作用:把两个路径拼起来 “D:\resource\a.txt”
1.3 绝对路径和相对路径
绝对路径:
从盘符开始,一直到目标的完整路径
相对路径:
从当前位置到目标的简单路径
好处: 书写简单
idea中的相对路径
一般情况是从项目(Project)所在的路径开始
如果不是: 可以使用System.getProperty(“user.dir”)获取
好处找项目中的文件或文件夹方便
File f1 = new File("D:\\JavaSE-code\\day09-code\\src\\a.txt");
System.out.println(f1.exists());
File f2 = new File("day09-code\\src\\a.txt");
System.out.println(f2.exists());
String s = System.getProperty("user.dir");
System.out.println(s);
1.4 File判断、获取信息的方法
方法名
说明
public boolean exists()
判断当前文件对象,对应的文件路径是否存在,存在返回true,反之。
public boolean isFile()
判断当前文件对象指代的是否是文件,是文件返回true,反之。
public boolean isDirectory()
判断当前文件对象指代的是否是文件夹,是文件夹返回true,反之。
public String getName()
获取文件的名称(包含后缀)
public long length()
获取文件的大小,返回字节个数
public long lastModified()
获取文件的最后修改时间。
public String getPath()
获取创建文件对象时,使用的路径
public String getAbsolutePath()
获取绝对路径
public static void main(String[] args) throws UnsupportedEncodingException {
// 1.创建文件对象,指代某个文件
File f1 = new File("D:/resource/a.txt");
//File f1 = new File("D:/resource/");
// 2、public boolean exists():判断当前文件对象,对应的文件路径是否存在,存在返回true.
System.out.println(f1.exists());
// 3、public boolean isFile() : 判断当前文件对象指代的是否是文件,是文件返回true,反之。
System.out.println(f1.isFile());
// 4、public boolean isDirectory() : 判断当前文件对象指代的是否是文件夹,是文件夹返回true,反之。
System.out.println(f1.isDirectory());
// 5.public String getName():获取文件的名称(包含后缀)
System.out.println(f1.getName());
// 6.public long length():获取文件的大小,返回字节个数
System.out.println(f1.length());
// 7.public long lastModified():获取文件的最后修改时间。
long time = f1.lastModified();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
System.out.println(sdf.format(time));
// 8.public String getPath():获取创建文件对象时,使用的路径
File f2 = new File("D:\\resource\\ab.txt");
File f3 = new File("file-io-app\\src\\itheima.txt");
System.out.println(f2.getPath());
System.out.println(f3.getPath());
// 9.public String getAbsolutePath():获取绝对路径
System.out.println(f2.getAbsolutePath());
System.out.println(f3.getAbsolutePath());
}
1.5 File创建、删除方法
创建方法
方法名
说明
public boolean createNewFile()
创建一个新的没有内容的文件
public boolean mkdir()
只能创建一级文件夹
public boolean mkdirs()
可以创建多级文件夹
删除方法
注意: delete方法默认只能删除文件和空文件夹,删除后的文件不会进入回收站
方法名
说明
public boolean delete()
删除文件、空文件夹
public static void main(String[] args) throws Exception {
// 1、public boolean createNewFile():创建一个新文件(文件内容为空),创建成功返回true,反之。
File f1 = new File("D:/resource/itheima2.txt");
System.out.println(f1.createNewFile());
// 2、public boolean mkdir():用于创建文件夹,注意:只能创建一级文件夹
File f2 = new File("D:/resource/aaa");
System.out.println(f2.mkdir());
// 3、public boolean mkdirs():用于创建文件夹,注意:可以创建多级文件夹
File f3 = new File("D:/resource/bbb/ccc/ddd/eee/fff/ggg");
System.out.println(f3.mkdirs());
// 3、public boolean delete():删除文件,或者空文件,注意:不能删除非空文件夹。
System.out.println(f1.delete());
System.out.println(f2.delete());
File f4 = new File("D:/resource");
System.out.println(f4.delete());
}
public class Demo {
public static void main(String[] args) {
System.out.println(sum(100));
}
public static int sum(int n){
if (n==1){
return 1;
}else {
return n+sum(n-1);
}
}
}
public class Demo2 {
public static void main(String[] args) {
// 选中代码 Ctrl+ALt+T 选择使用try-with-resources
try (FileOutputStream fos = new FileOutputStream("day18//finally.txt",true)) {
fos.write(98);
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
2.5 文件字节流输入流
基本使用
创建FileInputStream对象(构造方法,参数为要操作文件的路径)
FileInputStream fis = new FileInputStream(String path)
FileInputStream fis = new FileInputStream(File file)
注意: 文件不存在,报错
读数据(read方法)
int read();
注意: 每次读一个字节,当读到末尾,没有数据可以读,返回-1(作为结束标记)
释放资源(close方法)
public class Demo {
/*
文件字节输入流FileInputStream
1.创建对象(从哪一个文件读)
FileInputStream(String path)
FileInputStream(File file)
2.读方法
int read() 一次读一个字节 ,如果文件读到了末尾,没有数据可读,返回-1 作为结束标记
3.释放资源
*/
public static void main(String[] args) throws IOException {
FileInputStream fis = new FileInputStream("day10-code\\a.txt");
// int b1 = fis.read();
// System.out.println((char) b1);
// int b2 = fis.read();
// System.out.println((char) b2);
// int b3 = fis.read();
// System.out.println(b3);
// int b4 = fis.read();
// System.out.println(b4);
// 循环做优化
int b; // 准备记录这一次读到的字节
// (b = fis.read()): 把这一次读到的字节赋值给b ()目的提高优先级
// 拿着b判断是不是-1
// 如果不是-1 继续执行循环
// 是-1 结束循环
while ((b = fis.read()) != -1){
System.out.print((char) b);
}
fis.close();
}
}
一次读多个字节
int read(byte[] b)
作用: 一次读多个字节到字节数组中
返回值: 返回这次读了多少个字节,同样返回-1作为结束标记
public class Demo1 {
/*
FileInputStream 一次读多个字节的方法
int read(byte[] b);
一次读多个字节放到这个字节数组中
返回值表示这一次读到了多少个字节
如果文件读到了末尾,没有数据可读,返回-1 作为结束标记
*/
public static void main(String[] args) throws IOException {
FileInputStream fis = new FileInputStream("day10-code\\a.txt");
byte[] bytes = new byte[2];
int len1 = fis.read(bytes);
System.out.println(len1);
System.out.println(Arrays.toString(bytes)); // 97 98 a b
int len2 = fis.read(bytes);
System.out.println(len2);
System.out.println(Arrays.toString(bytes)); // 99 100 c d
int len3 = fis.read(bytes);
System.out.println(len3); // 1
System.out.println(Arrays.toString(bytes)); // 101 e
int len4 = fis.read(bytes);
System.out.println(len4);
System.out.println(Arrays.toString(bytes));
fis.close();
}
}
2.6 文件复制
思路: 循环读写
public class Demo {
public static void main(String[] args) throws IOException {
// 从哪读往哪里写
FileInputStream fis = new FileInputStream("day10-code\\file\\a.avi");
FileOutputStream fos = new FileOutputStream("day10-code\\copy\\a.avi");
// 循环读写 一次读写一个字节(慢)
int b;
while ((b = fis.read()) != -1){
fos.write(b);
}
fis.close();
fos.close();
}
}