JavaBase-IO流
File类的使用
File类的实例化
-
java.io.File类:文件和文件目录路径的抽象表示形式,与平台无关
-
File能新建、删除、重命名文件和目录,但File不能访问文件本身。
- 如果需要访问文件内容本身,则需要使用输入/输出流
-
想要在Java中表示一个真实存在的文件及目录,那么必须有一个File对象,但是Java程序中的一个File对象,可能没有真实存在的文件或目录。
-
File对象可以作为参数传递给流的构造器
-
/** * 1.如何创建File的实例 */ @Test public void test1(){ //构造器1 File file = new File("hello.txt"); File file2 = new File("D:\\personal\\ideaWorkspace\\hello.txt"); File file3 = new File("D:"+File.separator+"personal"+ File.separator+"ideaWorkspace"+File.separator+"hello.txt"); //构造器2 File file4 = new File("D\\test","child"); System.out.println(file4); //构造器3 File file5 = new File(file4,"test.txt"); System.out.println(file5); }
-
-
File的使用
- 如何创建File类的实例
- 调用File类的构造器
- 相对路径:相较于某个路径下,指明的路径。
- 绝对路径:包含全盘符在内的文件或文件目录的路径
- 如何创建File类的实例
-
File类的使用:路径分隔符
-
路径中的每级目录之间用一个路径分隔符隔开。
-
路径分隔符和系统有关:
- windows和DOS系统默认使用“\”来表示
- UNIX和URL使用“/”来表示
-
Java程序支持跨平台运行,因此路径分隔符要慎用
-
为了解决这个隐患,File类提供了一个常量:
-
public static final String separator。根据操作系统,动态地提供分隔符。
-
举例:
-
@Test public void test1(){ File file = new File("hello.txt"); File file2 = new File("D:\\personal\\ideaWorkspace\\hello.txt"); File file3 = new File("D:"+File.separator+"personal"+File.separator+"ideaWorkspace"+File.separator+"hello.txt") }
-
-
File类的常用方法
-
当硬盘中真有一个真实的文件或目录存在时,创建File对象时,各个属性会显示赋值。
-
当硬盘中没有真实的文件或目录存在时,那么创建对象是,除了指定的目录和路径之外,其他的属性都是取成员变量的默认值
-
File类的获取功能:
-
public String getAbsolutePath():获取绝对路径
-
public String getPath():获取路径
-
public String getName():获取名称
-
public String getParent():获取上层文件目录路径。若无,返回null
-
public long length():获取文件长度(即:字节数)。不能获取目录的长度
-
public long lastModified():获取最后一次的修改时间,毫秒值
-
public String[] list():获取指定目录下的所有文件及文件目录的名称数组
-
public File[] listFiles:获取指定目录下的所有文件或者文件目录的File数组
-
@Test public void test2(){ File file1 = new File("hello.txt"); File file2 = new File("D:\\io\\hi.txt"); System.out.println(file1.getAbsolutePath()); System.out.println(file1.getPath()); System.out.println(file1.getName()); System.out.println(file1.getParent()); System.out.println(file1.length()); System.out.println(file1.lastModified()); System.out.println(); System.out.println(file2.getAbsolutePath()); System.out.println(file2.getPath()); System.out.println(file2.getName()); System.out.println(file2.getParent()); System.out.println(file2.length()); System.out.println(file2.lastModified()); } @Test public void test3(){ File file = new File("D:\\personal\\ideaWorkspace\\NewJavaBase\\java-base-io"); String[] list = file.list(); for(int i=0;i<=list.length-1;i++){ System.out.println(list[i]); } File[] files = file.listFiles(); for(int i=0;i<=files.length-1;i++){ System.out.println(files[i]); } }
-
-
File类的重命名功能
-
public boolean renameTo(File dest):把文件重命名为指定的文件路径
-
/** * renameTo(File dest):把文件重命名为指定的文件路径,比如file1.renameTo(file2),想要保证 * 返回为true,需要file1在硬盘中是存在的,且file2不能在硬盘中存在 */ @Test public void test4(){ File file = new File("D:\\personal\\ideaWorkspace\\NewJavaBase\\java-base-io\\hello.txt"); File file2 = new File("D:\\personal\\ideaWorkspace\\NewJavaBase\\java-base-io\\hello2.txt"); System.out.println(file.renameTo(file2)); }
-
-
File类的判断功能
-
public boolean isDirectory():判断是否是文件目录
-
public boolean isFile():判断是否是文件
-
public boolean exists():判断是否存在
-
public boolean canRead():判断是否刻度
-
public boolean canWrite():判断是否可写
-
public boolean isHidden():判断是是否隐藏
-
@Test public void test5(){ File file2 = new File("D:\\personal\\ideaWorkspace\\NewJavaBase\\java-base-io\\hello2.txt"); //判断是否是文件目录 System.out.println(file2.isDirectory()); //判断是否是文件 System.out.println(file2.isFile()); //判断文件是否存在 System.out.println(file2.exists()); //判断文件是否可读 System.out.println(file2.canRead()); //判断文件是否可写 System.out.println(file2.canWrite()); //判断文件是否隐藏 System.out.println(file2.isHidden()); }
-
-
File类的创建功能
-
public boolean createNewFile():创建文件。若文件存在,则不创建,返回false
-
public boolean mkdir():创建文件目录。如果此文件目录存在,就不创建了。如果此文件目录的上层目录不存在,也不创建
-
public boolean mkdirs():创建文件目录。如果上层文件目录不存在,一并创建
- 注意事项:如果创建文件或文件目录没有写盘符路径,那么,默认在项目路径下
-
@Test public void test6() throws IOException { File file1 = new File("hi.txt"); if(!file1.exists()){ file1.createNewFile(); System.out.println("创建成功"); }else{ file1.delete(); System.out.println("删除成功"); } } @Test public void test7(){ File file1 = new File("D:\\io\\io1"); boolean mkdir = file1.mkdir(); if(mkdir){ System.out.println("创建成功1"); } File file2 = new File("D:\\io\\io2"); boolean mkdirs = file2.mkdirs(); if(mkdirs){ System.out.println("创建成功2"); } }
-
-
File类的删除功能:
- public boolean delete():删除文件或文件夹
- 删除注意事项:
- Java中删除不走回收站
- 要删除一个文件目录,请注意该文件目录内不能包含文件或文件目录
- 删除注意事项:
- public boolean delete():删除文件或文件夹
IO流原理及流的分类
- File类中涉及到关于文件或文件目录的创建、删除、重命名、修改时间、文件大小等方法,并未涉及到写入或读取文件内容的操作。如果需要读取或写入文件内容,必须使用IO流来完成
Java IO 原理
- I/O是Input/Output的错写,I/O计数是非常实用的技术,用于处理设备之间的数据传输。如读/写文件,网络通讯等
- Java程序中,对于数据的输入/输出操作以“流(Stream)”的方式进行。
- Java.io包下提供了各种"流"类和几口,用以获取不同种类的数据,并通过标准的方法输入或输出数据
- 输入input:读取外部数据(磁盘、光盘等存储设备的数据)到程序(内存)中
- 输出output:将程序(内存)数据输出到磁盘、光盘等存储设备中
流的分类
-
按操作“数据单位”不同分为:字节流(8 bit),字符流(16 bit)
-
按数据流的“流向”不同分为:输入流,输出流
-
按流的“角色”的不同分为:节点流,处理流
- 节点流:直接作用在文件上的
- 处理流:在流的基础上再包一层是处理流
-
Java的IO流共涉及40多个类,实际上非常规则,都是从如下4个抽象基类派生的
-
抽象基类 字节流 字符流 输入流 InputStream Reader 输出流 OutputStream Writer
-
-
由着四个类派生出来的子类名称都是以其父类名作为子类名后缀的
- 节点流:FileInputStream FileOutputStream FileReader FileWriter
- 处理流:ByteArrayInputStream ByteArrayOutputStream CharArrayReader CharArrayWriter
PipedInputStream PipedOutputStream PipedReader PipedWriter
StringReader StringWriter
BufferedInputStream BufferedOutputStream BufferedReader BufferedWriter
InputStreamReader OutputStreamWriter
ObjectInputStream ObjectOutputStream
FilterInputStream FilterOutputStream FilterReader FilterWirter
PrintStream PrintWriter
PushbackInputStream PushbackReader
DataInputStream DataOutputStream
IO流体系(加粗为重要)
-
分类 字节输入流 字节输出流 字符输入流 字符输出流 抽象基类 InputStream OutputStream Reader Writer 访问文件 FileInputStream FileOutputStream FileReader FileWriter 访问数组 ByteArrayInputStream ByteArrayOutputStream CharArrayReader CharArrayWriter 访问管道 PipedInputStream PipedOutputStream PipedReader PipedWriter 访问字符串 StringReader StringWriter 缓冲流 BufferedInputStream BufferedOutputStream BufferedReader BufferedWriter 转换流 InputStreamReader OutputStreamWriter 对象流 ObjectInputStream ObjectOutputStream FilterInputStream FilterOutputStream FilterReader FilterWirter 打印流 PrintStream PrintWriter 推回输入流 PushbackInputStream PushbackReader 特殊流 DataInputStream DataOutputStream