IO流
- IO流是什么?
- IO:input 和 output
- 输入输出流的意思?
- Java 程序进行数据传输的管道!
- 流就是管道的意思
- 流:Stream
- 显示网络操作中有没有进行数据输入输出的操作?
- 有:
- 例如:上网注册信息的时候,对图片信息的上传!—–上传 –输入到程序中 输入流
- 从网上下载数据的时候,也是数据的传输! —–下载 –输出的操作
文件(File)概述
- 在计算机中所有的数据都是以文件的格式存储的!
- 在Java中认为文件是一个对象!!!
- Java认为所有的东西都是对象!
官方解释:
- 文件和目录路径名的抽象表示形式。(磁盘上的文件和文件夹都是File类的对象)
- 文件就是磁盘上的文件在Java语言中的表示对象!
- class类——对象—>**.class 在内存中的表现形式
- now类():jvm — class 文件–>class对象
- File类的对象 就是磁盘上所有的文件 在Java语言中的对象的表现形式。
File类的构造方法
-
File(String pathname):根据一个路径得到File对象
-
File(String parent,String child):根据一个目录和一个子文件/目录得到File对象
-
File(File parent,String child):根据一个父File对象和一个子文件、目录得到File对象
-
例:
public static void main(String[] args){ // File(String pathname); 根据一个路径得到File对象 // Java中一个“\”代表的是转移字符开始标志,要是想用"\"就必须要有"\\"来表示 File file1 = new File("D:\\java\\a.txt"); // File(String parent,String child):根据一个目录和一个子文件/目录得到File对象 // Java中认为文件夹是一种特殊的文件 只不过文件夹中的内容是其它的文件或文件夹,而文件中是数据 File file2 = new File("D:\\java", "a.txt"); // File(File parent,String child):根据一个父File对象和一个子文件、目录得到File对象 File file3 = new File("D:\\java"); File file4 = new File(file3,"a.txt"); }
File 类的成员方法
- 创建功能
- 删除功能
- 重命名功能
- 判断功能
- 获取功能
创建功能
-
public boolean createNewFile(): 创建文件 如果存在这样的文件,就不创建了
-
public boolean mkdir(): 创建文件夹 如果存在这样的文件夹,就不创建了
-
public boolean mkdirs(): 创建文件夹 如果父文件不存在,会帮你创建出来
-
例:
// public boolean createNewFile(): 创建文件 如果存在这样的文件,就不创建了 File file = new File("D:\\java\\a.txt"); boolean rst = file.createNewFile();//true // 如果没有指明创建文件的路径 那么该文件是在项目路径下创建 File file = new File("a.txt"); boolean rst = file.createNewFile();//true // 如果路径不存在能不能创建?不能 java.io.IOException: 系统找不到指定路径。 // 如果调用改createNewFile()方法的时候 路径必须存在 File file = new File("D:\\java\\cc\\a.txt"); boolean rst = file.createNewFile();//false
File创建文件夹
-
例:
// public boolean mkdir(): 创建文件夹 如果存在这样的文件夹,就不创建了,而且不能创建多重文件夹 File file = new File("D:\\javase\\JavaWeb"); boolean rst = file.mkdir(); // public boolean mkdirs(): 创建文件夹 如果父文件不存在,会帮你创建出来 // 这个方法则可以创建多重文件夹 boolean ret2 = file2.madirs(); File file2 = new File("jjjjj");// 如果不填路径,且不知道是文件夹还是文件的情况下 boolean rst3 = file.mkdir();// 如果调用【mkdir】这样会直接创建到项目路径里,出现的是文件夹 boolean rst4 = file.creatNewFile();// 如果调用【creatNewFile】这样会直接创建到项目路径里,出现的是文件
删除功能
-
例:
// public boolean delete(); 可以用来删除文件和文件夹 File file = new File("jjjjj"); file.delete(); // aaaaa下面还有文件夹 没有删除成功 // 注意:delete删除的文件夹下面不能有文件或文件夹 File file2 = new File("D:\\java\\jjjjj"); boolean delete2 = file2.delete(); System.out.println(delete2);
重命名功能
-
public boolean renameTo(File dest); 可以给文件或者文件夹改名字
-
例:
File file = new File("a"); File file2 = new File("b"); File file3 = new File("c.txt"); file.mkdir(); file2.mkdir(); file3.createNewFile(); // 把a和b改成aa和bb File file4 = new File("aa"); file.renameTo(file4); File file5 = new File("bb"); file2.renameTo(file5); // c.txt改成cc.txt file3.renameTo(new Fele("cc.txt")); // 移动文件夹 File file4 =new Flie("cc.txt"); file4.renameTo(new File("D:\\javase\\ccccc.txt"));
判断功能
-
public boolean isDirectory(); 判断是否是目录
-
public boolean isFile(); 判断是否是文件
-
public boolean exists(); 判断是否存在
-
public boolean canRead(); 判断是否可读
-
public boolean canWrite(); 判断是否可写
-
public boolean isNidden(); 判断是否隐藏
-
例:
File file = new File("a"); File file2 = new File("b"); File file3 = new File("c.txt"); // public boolean isDirectory(); 判断是否是目录 boolean rst = file.isDirectory(); System.out.ptintln(rst); // public boolean isFile(); 判断是否是文件 rst = file3.isFile(); System.out.ptintln(tst); // public boolean exists(); 判断是否存在 rst = file3.exists(); System.out.println(rst); // public boolean canRead(); 判断是否可读 rst = file.canRead(); System.out.println(rst); // public boolean canWrite(); 判断是否可写 rst = file.canWrite(); System.out.println(rst); // public boolean isNidden(); 判断是否隐藏 File file5 = new File("D:\\javase\\Record\\ccccc.txt"); rst = file5.isNidden(); System.out.println(rst);
获取功能
-
public String getAbsoluteBath(); 获取绝对路径
-
public String getPath(); 获取相对路径
-
public String getName(); 获取名称
-
public long length(); 获取长度,字节数
-
public long lastModified(); 获取最后一次的修改时间,毫秒数
- 相对路径:相对于当前项目的路径
- 绝对路径:文件在系统磁盘上的路径,从盘符开始,一直到文件/文件夹的名称就叫做绝对路径。
-
public String[] list(); 获取指定目录下的所有文件或者文件夹的名称数组
-
public File[] listFiles(); 获取指定目录下的所有文件或者文件夹的File数组
-
例:
// 下面的文件的路径都是相对路径 // 都是相对于当前的项目的路径 File file = new File("aa"); File file2 = new File("bb"); File file3 = new Flie("c.txt"); // 下面的是绝对路径,从磁盘的盘符位置开始 File file4 = new File("D:\\javase\\Record\\ccccc.txt"); // public String getAbsolutePath(); 获取绝对路径 String absolutePath = file.getAbsolutePath(); System.out.println(absolutePath); System.out.println(file3.getAbsolutePath()); // public String getPath(); 获取相对路径 String path = file.getPath(); System.out.println(path); File file5 = new File("aa//c.txt"); System.out.println(file5.getPath()); // public String getName(); 获取名称 // 不带路径 只有文件或者文件夹的名称 System.out.println(file.getName); System.out.println(file4.getName); // public long length(); 获取长度,字节数 // 文件夹的长度总是0 System.out.println(file.length()); // 文件的长度 System.out.println(file3.length()); // public long lastModified(); 获取最后一次修改时间,毫秒数 long time = file.lastModified(); Date d = new Date(time); System.out.println(d.toLocaleString()); File file = new File("D:\软件"); // public String[] list(); 获取指定目录下的所有文件或者文件夹的名称数组 String[] names = file.list(); for(String string : names){ System.out.println(string); } // public File[] listFiles(); 获取指定目录下的所有文件或者文件夹的File数组 File[] listFiles = file.listFiles(); for(File file2 : listFiles){ System.out.println(file2.getAbsolutePath()); }
File类练习
-
判断盘符里 目录下是否有后缀名为 .png 的文件,就输出此文件的绝对路径
// 分析:1. 把要搜索的目录包装成File对象 // 2. 得到该文件夹下所有的文件对象 // 3. 判断每个文件名的是否以png结尾,如果是就打印出来 public static void main(String[] args) { // 判断盘符里 目录下是否有后缀名为 .png 的文件,就输出此文件的绝对路径 File file = new File("D:\\学习\\tupian"); File[] file2 = file.listFiles(); for (File file3 : file2){ String name = file3.getName(); if(name.endsWith(".png")){ String path = file3.getAbsolutePath(); System.out.println(path); } } }
-
批量改文件的名字,把文件夹中类似于文件名,“零基础学Java_001_IO流概述”改成“001_IO流概述”
// 分析: // A:得到所有的文件对象(把所有要改名字的文件编程File对象) // 1、得到所在文件的目录 // 2、通过对这个目录进行File对象的包装,得到他下面的所有的File对象(listFiles) // B:遍历所有的文件对象,在遍历的过程中对文件进行改名(renameTo) // 改名字的步骤: // 1、得到原来文件的名字(getName) // 2、对原来文件中的名字进行提取(字符串内容截取,substring) // 原:零基础学Java_001_IO流概述 // 现在:001_IO流概述 // 截取之后拼接成一个新名字 // 3、改名 // 利用原来该文件所在的文件路径+新名字,构建一个新的File对象 // 原来的文件对象.renameTo(构造的新的File对象). public static void main(String[] args){ // 文件所在的目录 File file = file = new File(""); // 得到所有的文件对象 File[] files = file.listFiles(); // 遍历files,在遍历的过程中改名 for(File file2 : files){ // 得到文件名 String name = file2.getName(); //System.out.println(name); // 零基础学Java_001_IO流_IO流概述.mp4 int start_ = name.indexOf("_"); String first = name.substring(start_+1,start_+4); int end_ = name.lastIndexOf("_"); String last = name.substring(end_); // 新文件名字 String newName = first+last; // 对file2进行重命名,就要创建一个新的File对象 File newFile = new File(file,newName); file2.renameTo(newFile); } }
IO流的分类
- 流向:(不管是输入流还是输出流都是相对于你当前的程序而言的)
- 输入流(读 read)input
- 输出流(写 write)output
- 传输的内容分:
- 字节数据:图片、音频、视频
- 字节输入流:InputStream
- 字节输出流:OutputStream
- 字符数据:abcd
- 字符输入流:Reader
- 字符输出流:Writer
- 字节数据:图片、音频、视频
- 不管是字节流还是字符流,底层流动的都是字节!
IO体系结构
- IO流
- 字节流
- 字节输入流
- InputSteam
- FileInputStream处理文件的字节输入流
- InputSteam
- 字节输出流
- OutputStream
- FileOutputStream处理文件的字节输出流
- OutputStream
- 字符流
- 字符输入流
- Reader
- FileReader处理文件的字符输入流
- Reader
- 字符输出流
- Writer
- FileWriter处理文件的字符输出流
- Writer
- 字符输入流
- 字节输入流
- 字节流