IO技术(一)IO技术和File类

来源:互联网 发布:linux查看当前用户名 编辑:程序博客网 时间:2024/05/17 21:56

详细见API文档 ,代码:https://pan.baidu.com/s/1hrH7iTI 密码: iegq

package com.demo;import java.io.File;import java.io.FileFilter;import java.io.FilenameFilter;import java.io.IOException;import java.util.LinkedList;/* * 1.IO技术: * 引入:之前学习中所有数据都在内存中,程序停止,虚拟机关闭,内存释放,数据消失, * 但是一些程序的数据需要持久化存储,每次启动程序都基于上次的数据操作; *  * 介绍:Input(I) 输入,读;Output(O)输出,写 *  * 2.File: * 2.1.引入:数据在持久设备是如何体现的?数据都保存在文件中,而JAVA不能直接操作硬盘数据,硬 * 盘数据由操作系统管理,JAVA运行在JVM,JVM和操作系统对话,这时只要JVM暴露了一些规 * 则,我们就能操作硬盘数据;JVM把对文件(文件夹)操作的规则封装成了一个类,即File类; *  * 2.2.方法: *   构造方法([2.2-1]): * File(str)把字符串封装成File对象不会检测路径是否存在windows下C:\\t.txt * File(String p,String c)父路径和子路径封装成完整路径,获得File对象 * File(File p,String c) * File(URL) *  *   成员方法([2.2-2]): * booleanexists判断文件是否存在 * booleancreateNewFile、mkdir、mkdirs创建文件、文件夹、多级目录 * booleandelete彻底删除文件、文件夹(只能删除最底层目录,无法删除操作系统相关) * booleanisDirectory、isFile、isHidden 判断是否是文件夹、文件、是否隐藏 * longlength返回文件大小(字节,汉字两个字节) *  * getAbsolutePath、getAbsoluteFile绝对路径 封装成String、封装成File * getPath路径(new File(xxx) xxx写什么获取什么) * getParent、getParentFile路径(new File(xxx) xxx不包括文件名的路径) *  * getName文件、文件夹名 * getTotalSpace、getFreeSpace、getUsableSpace磁盘总容量、已用空间(无法直接获取空余空间,空余空间需要总-已用) * longlastModified最后修改时间 *  *   成员变量(用于获取系统文件分隔符): * pathSeparator路径分隔符(linux 和windows不一致) *  *   获取指定目录下的所有文件、文件夹([2.2-3]) * String[]list指定文件夹下的所有文件和文件夹名称 * File[]listFiles指定文件夹下的所有文件和文件夹(绝对路径),并封装成File对象 * ——————>练习:获取指定目录及子目录下的所有文件、文件夹(递归[2.2-4],文件队列[2.2-5],见视频IO-9) *   *   过滤器 * list(FilenameFilter filter)过滤文件 * listFiles(FileFilter filter) 过滤文件和文件夹 * ————————>过滤文件是必须由两部分组成,第一是否是文件(目录),然后判断是不是需要的文件(目录) *  *  * */class MyFileFilter implements FileFilter {@Overridepublic boolean accept(File pathname) {if (!pathname.isFile()) {return false;}return pathname.getName().endsWith(".txt");}}class MyFileNameFilter implements FilenameFilter {private String filterstr;public MyFileNameFilter(String filterstr) {this.filterstr = filterstr;}@Overridepublic boolean accept(File dir, String name) {return name.endsWith(filterstr);}}class Queue<E> {// 队列private static final LinkedList<File> queue = new LinkedList<File>();public void addLast(File file) {queue.addLast(file);}public File popFirst() {return queue.removeFirst();}public boolean isEmpty() {return queue.isEmpty();}}public class MyFile {public static void main(String[] args) {// [2.2-1] File 构造方法// TestCons();// [2.2-2] File 成员方法// TestField();// [2.2-3]// FileTest();// [2.2-4]// getAllFile();// 递归,缺点:每当file2是目录的时候就压栈,可能造成StackOverflowError// [2.2-5]// getAllFile2();// 文件队列,防止栈溢出;相对而言堆溢出比栈溢出难// filenameFilter();fileFilter();}private static void fileFilter() {String path = "/Users/lxt/eclipse/06IO/";File file = new File(path);if (!file.exists()) {return;}if (!file.isDirectory()) {return;}File[] listFiles = file.listFiles(new MyFileFilter());for (File file2 : listFiles) {System.out.println(file2);}}private static void filenameFilter() {String path = "/Users/lxt/eclipse/06IO/";File file = new File(path);if (!file.exists()) {return;}if (!file.isDirectory()) {return;}String[] str = file.list(new MyFileNameFilter(".txt"));for (String string : str) {System.out.println(string);}}private static void getAllFile2() {String path = "/Users/lxt/eclipse/06IO/";File file = new File(path);if (!file.exists()) {return;}if (!file.isDirectory()) {return;}Queue<File> queue = new Queue();getFiles2(file, queue);while (!queue.isEmpty()) {File popFirst = queue.popFirst();getFiles2(popFirst, queue);}}private static void getFiles2(File file, Queue<File> queue) {for (File file1 : file.listFiles()) {if (file1.isDirectory()) {queue.addLast(file1);} else {System.out.println(file1);}}}private static void getAllFile() {String path = "/Users/lxt/eclipse/06IO/";File file = new File(path);if (!file.exists()) {return;}getFiles(file);}private static void getFiles(File file) {File[] files = file.listFiles();for (File file2 : files) {if (file2.isDirectory()) {getFiles(file2);} else {System.out.println(file2);}}}private static void FileTest() {// 要获取一个目录下的所有文件和文件夹,就需要把这个目录封装成File对象,然后去File类下找APIString path = "/Users/lxt/eclipse/06IO/";File file1 = new File(path);String[] list = file1.list();for (String string : list) {System.out.println(string);}}private static void TestField() {String path = "/Users/lxt/eclipse/06IO/test.txt";// 当前环境是LinuxFile file1 = new File(path);try {System.out.println("文件是否存在:" + file1.exists());if (!file1.exists()) {System.out.println("创建文件:" + file1.createNewFile());// 文件不存在就创建// System.out.println("创建目录:" + file1.mkdirs()); //// mkdir只能创建一级目录} else {// System.out.println("删除文件文件夹:" + file1.delete());}System.out.println("磁盘总空间:" + file1.getTotalSpace());System.out.println("磁盘已用空间:" + file1.getFreeSpace());System.out.println("磁盘已用空间:" + file1.getUsableSpace());System.out.println("最后修改时间:" + file1.lastModified());} catch (IOException e) {e.printStackTrace();}}private static void TestCons() {// 创建字符串表示File对象要封装的路径名称String path = "/Users/lxt/eclipse/06IO/test.txt";// 创建File对象File file1 = new File(path);// 不会检测路径是否存在System.out.println("File构造方法1:" + file1);File file2 = new File("/Users/lxt/eclipse/06IO/", "test.txt");System.out.println("File构造方法1:" + file2);File file3 = new File(file1, "test.txt");System.out.println("File构造方法1:" + file3);}}



0 0
原创粉丝点击