什么是文件?
文件,我们并不陌生。文件是保存数据的地方。比如大家经常使用的word文档,txt文件,excel文件等,都是文件。它既可以保存一张图片,也可以保存声音、视频……
文件流
文件在程序中是以流的形式来操作的:
流:数据在数据源(文件)和程序(内存)之间经历的路径
输入流:数据从数据源(文件)到程序(内存)之间的路径
输出流:数据从程序(内存)到数据源(文件)之间的路径
创建文件对象相关构造器和方法
相关方法:
new File(String pathname)//根据路径构建一个File对象 new File(File patent,String child)//根据父目录文件+子路径构建 new File(String parent,String child)//根据父目录+子路径构建
例子:应用案例演示:FileCreate
package li.io.file; import org.junit.jupiter.api.Test; import java.io.File; import java.io.IOException; //演示创建文件 public class FileCreate { public static void main(String[] args) { } //方式一 new File(String pathname)//根据路径构建一个File对象 @Test public void creat01() { String filePath = "d:\\news1.txt"; File file = new File(filePath);//在内存中创建一个File对象 try { file.createNewFile();//创建文件 System.out.println("文件创建成功"); } catch (IOException e) { e.printStackTrace(); } } //方式二 new File(File patent,String child)//根据父目录文件+子路径构建 //例如:d:\\news.txt,父目录文件就是 d:\\ @Test public void creat02() { File parenFile = new File("d:\\"); String fileName = "news2.txt"; //这里的file对象,在java程序中只是一个java对象而已 //只有执行了createNewFile方法,才会真正地在磁盘创建文件 File file = new File(parenFile, fileName); try { file.createNewFile();//创建文件 System.out.println("创建成功~"); } catch (IOException e) { e.printStackTrace(); } } //方式三 new File(String parent,String child)//根据父目录+子路径构建 @Test public void creat03() { String parentPath = "d:\\"; //这里的两个 \\,其中有一个是转义符号,或者直接用 d:/ String filePath = "news3.txt"; File file = new File(parentPath, filePath); try { file.createNewFile(); System.out.println("创建文件成功"); } catch (IOException e) { e.printStackTrace(); } } }
例子:
package li.io.file; import org.junit.jupiter.api.Test; import java.io.File; public class FileInformation { public static void main(String[] args) { } //获取文件的信息 @Test public void info() { //先创建文件对象 File file = new File("d:\\news1.txt"); //调用相应方法,得到对应信息 //文件名字-getName() System.out.println("文件名字="+file.getName());//文件名字=news1.txt //文件的绝对路径-getAbsolutePath() System.out.println("文件的绝对路径="+file.getAbsolutePath());//文件的绝对路径=d:\news1.txt //文件的父级目录-getParentFile() System.out.println("文件的父级目录="+file.getParentFile());//文件的父级目录=d:\ //文件的大小(字节)-length() System.out.println("文件的大小(字节)="+file.length());//文件的大小(字节)=12 Hello World! //文件是否存在-exists() System.out.println("文件是否存在="+file.exists());//文件是否存在=true //是否为文件-isFile() System.out.println("是否为文件="+file.isFile());//是否为文件=true //是否为目录-isDirectory() System.out.println("是否为目录="+file.isDirectory());//是否为目录=false } }
mkdir():创建一级目录
mkdirs():创建多级目录
delete():删除空目录或者文件
例子:
package li.io.file; import org.junit.jupiter.api.Test; import java.io.File; public class Directory_ { public static void main(String[] args) { } //判断 d:\\news1.txt是否存在,如果存在就删除 @Test public void m1() { String filePath = "d:\\news1.txt"; File file = new File(filePath); if (file.exists()) { if (file.delete()) { System.out.println(filePath + "删除成功"); } else { System.out.println("删除失败..."); } } else { System.out.println("该文件不存在..."); } } //判断 d:\\demo02 是否存在,存在就删除,否则就提示不存在 //这里我们需要体会到,在java中,目录也被当做文件 @Test public void m2() { String filePath = "d:\\demo02"; File file = new File(filePath); if (file.exists()) { if (file.delete()) { System.out.println(filePath + "删除成功");//d:\demo02删除成功(先在d盘下创建一个名为 demo02的目录) } else { System.out.println("删除失败..."); } } else { System.out.println("该目录不存在..."); } } //判断d:\\demo\\a\\b\\c目录是否存在,如果存在就提示已经存在,否则创建 @Test public void m3() { String directoryPath = "d:\\demo\\a\\b\\c"; File file = new File(directoryPath); if (file.exists()) { System.out.println("该目录已经存在"); } else { if (file.mkdirs()) {//多级目录使用 mkdirs方法,一级目录使用 mkdir System.out.println(directoryPath + "创建成功..."); } else { System.out.println("创建失败..."); } } } }
按操作数据单位不同分为:字节流(8bit)、字符流(按字符)
字节流适用于二进制文件,字符流适用于文本文件
按数据流的流向不同分为:输入流、输出流
按流的角色不同分为:节点流、处理流(也叫包装流)
抽象基类 | 字节流 | 字符流 |
---|---|---|
输入流 | InputStream | Reader |
输出流 | OutputStream | Writer |
1)Java的IO流共涉及到40 多个类,实际上非常规则,都是从如上4个抽象基类派生的
InputStream、OutputStream、Reader、Writer都是抽象类,在使用的时候要去创建它们的实现子类
2)由这四个类派生出来的子类名称都是以其父类名作为子类名后缀
InputStream抽象类是所有类字节输入流的超类
InputStream常用的子类:
FileInputStream:文件输入流
BufferedInputStream:缓冲字节输入流
ObjectInputStream:对象字节输入流