IO流(Input Output)
IO技术主要的作用是用于解决设备与设备之间的数据传输问题。
比如:
硬盘--->内存 内存的数据--->硬盘上 键盘的数据---->内存中
IO技术的应用场景:
导出报表, 上传大头照 , 下载 , 解析XML文件……
数据保存到硬盘上,该数据就可以做到永久性保存,数据一般是以文件形式保存到硬盘上。
sun使用了一个File类描述了文件灬文件夹的。
摘抄自:Api
文件和目录路径名的抽象表示形式。
用户界面和操作系统使用与系统相关的路径名字符串 来命名文件和目录。此类呈现分层路径名的一个抽象的、与系统无关的视图。抽象路径名 有两个组件:
- 一个可选的与系统有关的前缀 字符串,比如盘符,
"/"
表示 UNIX 中的根目录,"\\\\"
表示 Microsoft Windows UNC 路径名。 - 零个或更多字符串名称 的序列。
路径名字符串与抽象路径名之间的转换与系统有关。将抽象路径名转换为路径名字符串时,每个名称与下一个名称之间用一个默认分隔符 隔开。默认名称分隔符由系统属性file.separator
定义,可通过此类的公共静态字段
和separator
使其可用。将路径名字符串转换为抽象路径名时,可以使用默认名称分隔符或者底层系统支持的任何其他名称分隔符来分隔其中的名称。separatorChar
无论是抽象路径名还是路径名字符串,都可以是绝对 路径名或相对 路径名。绝对路径名是完整的路径名,不需要任何其他信息就可以定位它所表示的文件。相反,相对路径名必须使用取自其他路径名的信息进行解释。默认情况下,java.io
包中的类总是根据当前用户目录来解析相对路径名。此目录由系统属性user.dir
指定,通常是 Java 虚拟机的调用目录。
调用此类的 getParent()
方法可以获取抽象路径名的父 路径名,它由路径名前缀以及路径名名称序列中的每个名称(最后一个除外)组成。对于任何具有绝对抽象路径名的File 对象,如果其绝对抽象路径名以某个目录的绝对路径名开头,那么该目录的绝对路径名是该 File 对象的祖先。例如,抽象路径名"/usr" 表示的目录是路径名 "/usr/local/bin" 所表示目录的一个祖先。
在处理 UNIX 平台的根目录,以及 Microsoft Windows 平台的盘符、根目录和 UNC 路径名时,将用到前缀这一概念。如下所示:
- 对于 UNIX 平台,绝对路径名的前缀始终是
"/"
。相对路径名没有前缀。表示根目录的绝对路径名的前缀为"/"
且名称序列为空。 - 对于 Microsoft Windows 平台,包含盘符的路径名前缀由驱动器号和一个
":"
组成。如果路径名是绝对路径名,还可能后跟"\\"
。UNC 路径名的前缀是"\\\\"
;主机名和共享名是名称序列中的前两个名称。没有指定驱动器的相对路径名没有前缀。
此类的实例可能表示(也可能不表示)实际文件系统对象,如文件或目录。如果它表示这种对象,那么该对象驻留在一个分区 中。分区是文件系统特定于操作系统的存储分区。一个存储设备(例如,物理磁盘驱动器、闪存、CD-ROM)可以包含多个分区。对象(如果有)将驻留在此路径名(绝对形式)某个祖先指定的分区上。
文件系统可以实现对实际文件系统对象上的某些操作(比如,读、写、执行)进行限制。这些限制统称为访问权限。文件系统可以对一个对象设置多个访问权限。例如,一个设置可能适用于对象的所有者,另一个设置则可能适用于所有其他用户。对象上的访问权限可能导致此类的某些方法执行失败。
File
类的实例是不可变的;也就是说,一旦创建,File
对象表示的抽象路径名将永不改变。
-
从以下版本开始:
- JDK1.0
构造方法摘要 | |
---|---|
File(File parent,String child) 根据 parent 抽象路径名和 child 路径名字符串创建一个新 File 实例。 | |
File(String pathname) 通过将给定路径名字符串转换为抽象路径名来创建一个新 File 实例。 | |
File(String parent,String child) 根据 parent 路径名字符串和 child 路径名字符串创建一个新 File 实例。 | |
File(URI uri) 通过将给定的 file: URI 转换为一个抽象路径名来创建一个新的 File 实例。 |
方法摘要 | |
---|---|
boolean | canExecute() 测试应用程序是否可以执行此抽象路径名表示的文件。 |
boolean | canRead() 测试应用程序是否可以读取此抽象路径名表示的文件。 |
boolean | canWrite() 测试应用程序是否可以修改此抽象路径名表示的文件。 |
int | compareTo(File pathname) 按字母顺序比较两个抽象路径名。 |
boolean | createNewFile() 当且仅当不存在具有此抽象路径名指定名称的文件时,不可分地创建一个新的空文件。 |
static File | createTempFile(String prefix,String suffix) 在默认临时文件目录中创建一个空文件,使用给定前缀和后缀生成其名称。 |
static File | createTempFile(String prefix,String suffix, File directory) 在指定目录中创建一个新的空文件,使用给定的前缀和后缀字符串生成其名称。 |
boolean | delete() 删除此抽象路径名表示的文件或目录。 |
void | deleteOnExit() 在虚拟机终止时,请求删除此抽象路径名表示的文件或目录。 |
boolean | equals(Object obj) 测试此抽象路径名与给定对象是否相等。 |
boolean | exists() 测试此抽象路径名表示的文件或目录是否存在。 |
File | getAbsoluteFile() 返回此抽象路径名的绝对路径名形式。 |
String | getAbsolutePath() 返回此抽象路径名的绝对路径名字符串。 |
File | getCanonicalFile() 返回此抽象路径名的规范形式。 |
String | getCanonicalPath() 返回此抽象路径名的规范路径名字符串。 |
long | getFreeSpace() 返回此抽象路径名指定的分区中未分配的字节数。 |
String | getName() 返回由此抽象路径名表示的文件或目录的名称。 |
String | getParent() 返回此抽象路径名父目录的路径名字符串;如果此路径名没有指定父目录,则返回 null 。 |
File | getParentFile() 返回此抽象路径名父目录的抽象路径名;如果此路径名没有指定父目录,则返回 null 。 |
String | getPath() 将此抽象路径名转换为一个路径名字符串。 |
long | getTotalSpace() 返回此抽象路径名指定的分区大小。 |
long | getUsableSpace() 返回此抽象路径名指定的分区上可用于此虚拟机的字节数。 |
int | hashCode() 计算此抽象路径名的哈希码。 |
boolean | isAbsolute() 测试此抽象路径名是否为绝对路径名。 |
boolean | isDirectory() 测试此抽象路径名表示的文件是否是一个目录。 |
boolean | isFile() 测试此抽象路径名表示的文件是否是一个标准文件。 |
boolean | isHidden() 测试此抽象路径名指定的文件是否是一个隐藏文件。 |
long | lastModified() 返回此抽象路径名表示的文件最后一次被修改的时间。 |
long | length() 返回由此抽象路径名表示的文件的长度。 |
String[] | list() 返回一个字符串数组,这些字符串指定此抽象路径名表示的目录中的文件和目录。 |
String[] | list(FilenameFilter filter) 返回一个字符串数组,这些字符串指定此抽象路径名表示的目录中满足指定过滤器的文件和目录。 |
File[] | listFiles() 返回一个抽象路径名数组,这些路径名表示此抽象路径名表示的目录中的文件。 |
File[] | listFiles(FileFilter filter) 返回抽象路径名数组,这些路径名表示此抽象路径名表示的目录中满足指定过滤器的文件和目录。 |
File[] | listFiles(FilenameFilter filter) 返回抽象路径名数组,这些路径名表示此抽象路径名表示的目录中满足指定过滤器的文件和目录。 |
static File[] | listRoots() 列出可用的文件系统根。 |
boolean | mkdir() 创建此抽象路径名指定的目录。 |
boolean | mkdirs() 创建此抽象路径名指定的目录,包括所有必需但不存在的父目录。 |
boolean | renameTo(File dest) 重新命名此抽象路径名表示的文件。 |
boolean | setExecutable(boolean executable) 设置此抽象路径名所有者执行权限的一个便捷方法。 |
boolean | setExecutable(boolean executable, boolean ownerOnly) 设置此抽象路径名的所有者或所有用户的执行权限。 |
boolean | setLastModified(long time) 设置此抽象路径名指定的文件或目录的最后一次修改时间。 |
boolean | setReadable(boolean readable) 设置此抽象路径名所有者读权限的一个便捷方法。 |
boolean | setReadable(boolean readable, boolean ownerOnly) 设置此抽象路径名的所有者或所有用户的读权限。 |
boolean | setReadOnly() 标记此抽象路径名指定的文件或目录,从而只能对其进行读操作。 |
boolean | setWritable(boolean writable) 设置此抽象路径名所有者写权限的一个便捷方法。 |
boolean | setWritable(boolean writable, boolean ownerOnly) 设置此抽象路径名的所有者或所有用户的写权限。 |
String | toString() 返回此抽象路径名的路径名字符串。 |
URI | toURI() 构造一个表示此抽象路径名的 file: URI。 |
URL | toURL() 已过时。 此方法不会自动转义 URL 中的非法字符。建议新的代码使用以下方式将抽象路径名转换为 URL:首先通过 toURI 方法将其转换为 URI,然后通过 URI.toURL 方法将 URI 装换为 URL。 |
绝对路径:该文件在硬盘上的完整路径。绝对路径一般都是以盘符开头的
相对路径:相对路径就是资源文件相对当前程序所在的路径
. 当前路径
.. 上一级路径
注意:
如果程序当前所在的路径与资源文件不在同一个盘下面,不能写相对路径
package com.IO_File;
import java.io.File;
//文件过滤器
import java.io.FilenameFilter;
import java.io.IOException;
import java.sql.Date;
import java.text.SimpleDateFormat;
class MyFilter implements FilenameFilter{
public boolean accept(File dir, String name){
//dir:文件的目录
//name:文件名
if(name.endsWith("txt"))
return true;
return false;
}
}
public class File_1 {
public static void main(String[] args) throws IOException {
// TODO 自动生成的方法存根
//创建
// createNewFile() 在指定位置创建一个空文件,成功就返回true,如果已存在就不创建返回false
// mkdir() 在指定位置创建目录,这只会创建最后一级目录,如果上级目录不存在就抛异常
// mkdirs() 在指定位置创建目录,这回创建路径中所有不存在的目录
// renameTo(File dest) 重命名文件或文件,也可以操作非空的文件夹,文件不同的时候相当于文件的剪切,
// 剪切的时候不能操作非空文件夹,移动/重命名成功返回true
File file = new File("src/com/IO_File/File_1.java");
System.out.println("文件"+file.exists());
//创建文件
File file1 = new File("D:/50464/a.txt");
System.out.println(file1.createNewFile());
//创建单级文件夹
File file2 = new File("D:/50464/aaa");
System.out.println(file2.mkdir());
//创建多级文件夹
File file3 = new File("D:/50464/bbb/ccc");
System.out.println(file3.mkdirs());
//重命名文件
//renameTo() 如果目标文件与源文件是在同一个路径下,那么renameTo的作用是重命名
//如果目标文件与源文件不是在同一个路径下,那么renameTo的作用是剪切
File file4 = new File("D:/50464/b.txt");
System.out.println(file1.renameTo(file4));
//删除
// delete() 删除文件或一个空文件夹,如果是文件夹且不为空,则不能删除,成功返回true,失败返回flase
// deleteOnExit() 在虚拟机终止时,请求删除此抽象路径名表示的文件或目录,保证程序异常是临时文件也能删除
//delete不能用于删除非空的文件夹
File file5 = new File("D:/50464/bbb");
System.out.println(file5.delete());
file5.deleteOnExit();//JVM退出的时候删除文件,一般用于删除临时文件
// 判断:
// exists() 文件夹是否存在
// isFile() 是否是一个文件,如果不存在,则始终返回flase
// isDirectory()是否是一个目录,如果不存在,则始终返回flase
// isHidden() 是否是一个隐藏的文件或是否是隐藏的目录
// isAbsolute() 测试此抽象路径名是否为绝对路径名
File file6 = new File("src/com/IO_File/File_1.java");
System.out.println(file6.exists());
System.out.println("判断是否是一个文件"+file6.isFile());
System.out.println("判断是否是一个文件夹"+file6.isDirectory());
System.out.println("判断是否是一个隐藏文件或目录"+file6.isHidden());
System.out.println("判断是否是绝对路径"+file6.isAbsolute());
// 返回类型 方法 说明
// String getName() 返回由此抽象路径名表示的文件或目录的名称。
// String getPath() 将此抽象路径名转换为一个路径名字符串。
// String getAbsolutePath() 返回此抽象路径名的绝对路径名字符串。
// long length() 返回由此抽象路径名表示的文件的长度。
// String getParent() 返回此抽象路径名父目录的路径名字符串;如果此路径名没有指定父目录,则返回 null。
// long lastModified() 返回此抽象路径名表示的文件最后一次被修改的时间。
//
// 文件夹相关:
// static File[] listRoots() 列出可用的文件系统根。
// String[] list() 返回一个字符串数组,这些字符串指定此抽象路径名表示的目录中的文件和目录。
// String[] list(FilenameFilter filter) 返回一个字符串数组,这些字符串指定此抽象路
// 径名表示的目录中满足指定过滤器的文件和目录。
// File[] listFiles() 返回一个抽象路径名数组,这些路径名表示此抽象路径名表示的目录
// 中的文件。
// File[] listFiles(FilenameFilter filter) 返回抽象路径名数组,这些路径名表示
// 此抽象路径名表示的目录中满足指定过滤器的文件和目录。
File file7 = new File("50464/aa/bb/a.txt");
System.out.println("文件名"+file7.getName());//没用
System.out.println("获取绝对路径"+file7.getPath());//没用
System.out.println("获取绝对路径"+file7.getAbsolutePath());
File file8 = new File("D:/50464/a.txt");
System.out.println("获取文件的大小(字节为单位):"+file8.length());
System.out.println("获取文件的父路径"+file8.getParent());
//使用毫秒值转换成date对象
long lastModified = file8.lastModified();
Date date = new Date(lastModified);
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");
System.out.println("获取最后一次修改时间(毫秒值):"+dateFormat.format(date));
//文件夹获取
File[] roots= File.listRoots();//列出所有的根目录
for(int i=0;i<roots.length;i++)
System.out.println(roots[i]);
File file9 = new File("D:/");
String[] fileNames = file9.list();//列出当前文件夹的所有字子文件名与子文件夹名 存储到String中储存
for(String fileName:fileNames)
System.out.println(fileName);
File[] files1 = file9.listFiles();
//把当前文件夹下面的所有子文件与子文件夹都使用了一个File对象描述
//然后把这些File对象存储到一个File数组中返回
for(File fileItem : files1)
System.out.println("文件名"+fileItem.getName());
File file10 = new File("D:/1AAA我的资源");
//文件过滤
File[] files2 = file10.listFiles(new MyFilter());
for(File ff:files2)
System.out.println(ff.getName());
}
}