IO / XML
一、File类
1.定义/概念
Java是面向对象的语言,要想把数据存到文件中,就必须要有一个对象表示这个文件。File类的作用就是代表一个特定的文件或目录,并提供了若干方法对这些文件或目录进行各种操作。File类在java.io包下,与系统特定输入输出的相关的类都在此包下。
2.File类构造方法
构造一个File类的实例,并不是创建这个目录或文件,而是创建该路径(目录或文件)的一个抽象,他可能真实存在,也可能不存在
(1)File(File parent,String child)
根据parent 抽象路径名个cjild路径名字字符串创建一个新的File实例
(2) File(String pathname)
通过将给定路径名字符串转换为抽象路径名来创建一个新的File实例
(3)File(URI uri)
通过将给定的URI类对象转化为一个抽象路径名来创建一个新的File类实例
注意:1.在创建File类的实例的时候Java语言的一个显著特点是“”一处编译,处处运行“”,所以在使用File类的创建的时候需要保证这个File类也是跨平台的。但是不同的操作系统对文件路径的设定各有不同的规定在
**Windows系统写的文件路径是 C:\com\bd\Test.java 但是在Linux和Unix操作系统下文件的路径可能是/home/bd/Test.java **
3.File类提供了一些静态属性,通过这些静态属性,可以获得Java虚拟机所在操作系统的分隔符相关信息
(1) File.pathSeparator 与系统有关的路径分隔符,它贝表示为一个字符串
(2)File.pathSeparatorChar 与系统有关的路径分隔符,它贝表示为一个字符
(3) File.separator 与系统有关的默认名称分隔符,它贝表示为一个字符串
(4)File.SeparatorChar 与系统有关的默认名称分隔符,它贝表示为一个字符
举例
package com.lanqiao.demo1;
import java.io.File;
public class TestFileSeparator {
public static void main(String[] args) {
System.out.println("PATH分隔符:"+File.pathSeparator);//显示PATH的分隔符 " : "
System.out.println("路径分隔符:"+File.separator); //显示路径分隔符: " / "
}
}
4.File类使用
package com.lanqiao.demo1;
import java.io.File;
import java.io.IOException;
public class TestFile {
public static void main(String[] args) throws Exception {
System.out.println("文件系统根目录");
for(File root : File.listRoots()){
//format方法使用指定格式化字符串输出
System.out.format("%s",root);
}
System.out.println();
showFile();
}
public static void showFile() throws Exception {
//创建文件对象file,注意使用转义字符
File f = new File("C:\\com\\bd\\Tets.java");
File f1 = new File("C:\\com\\bd\\Tets1.java");
//当文件不存在时,创建一个新的空文件
f1.createNewFile();//在这里需要抛出异常
//指定输出格式
System.out.format("输出字符串:%s%n",f);
System.out.format("判断File类对象是否存在:%b%n",f.exists());
//%tc,输出日期和时间 %b 是布尔类型
System.out.format("获取File类对象最后修改时间:%tc %n", f.lastModified());
System.out.format("判断File类对象是否是文件:%b %n",f.isFile());
System.out.format("判断File类对象是否是目录:%b%n",f.isDirectory());
System.out.format("判断File对象是否有隐藏的属性 :%b%n",f.isHidden());
System.out.format("判断File对象是否是可读:%b%n",f.canRead());
System.out.format("判断File对象是否可写:%b%n",f.canWrite());
System.out.format("判断File对象是否可执行:%b%n",f.canExecute());
System.out.format("判断File对象是否是绝对路径:%b%n",f.isAbsolute());
System.out.format("获取File对象的长度:%d%n",f.length());
System.out.format("获取File对象的路径:%s%n",f.getPath());
System.out.format("获取File对象的绝对路径:%s%n",f.getPath());
System.out.format("获取File对象父目录的路径:%s%n",f.getParent());
}
}
5.静态导入
静态导入的特性:用来导入指定累的某个静态属性或方法或全部静态属性或方法,静态导入使用import static
静态导入前
package com.lanqiao.demo1;
public class TestStatic {
public static void main(String[] args) {
System.out.println(Integer.MAX_VALUE);
System.out.println(Integer.toHexString(12));
}
}
静态导入后
package com.lanqiao.demo1;
import static java.lang.System.out;//标记
import static java.lang.Integer.*;//标记
/**
* 静态导入后的代码
*
* @author Administrator
*
*/
public class TestStatic2 {
public static void main(String[] args) {
out.println(MAX_VALUE);
}
}
通过对比分析的:使用静态导入省略了System和Integer的书写,编写代码相对很简单,在使用静态导入的时候需要注意以下几点:
1.虽然在语言表述上说的是静态导入,打奶代码中必须写import static
2.防止静态导入冲突。例如:同时对 Integer 和 Long 类执行了静态导入,引用MAX_VALUE属性将导致一个编译器错误,编译器不知道使用哪个 M AX _VALUE
3.虽然静态导入让代码编写相对简单,但毕竟没有完整的写出静态成员所属类名,程序的可读性降低。
6.获取目录和文件
File类提供了一些方法,用来返回指定路径下的目录和文件。
String[] list() 返回字符串数组,这些字符串指定抽象路径名表示的目录中的文件个目录。
String[] list(Filename filter) 返回一个字符串数组,这些字符串指定此抽象名表示的目录中满足指定过滤器的文件和目录
File[] listFiles() 返回一个抽象路径名数组,这些路径名表示次抽象路径名表示的文件和目录
File[] listFiles(FilenameFilter fileter) 返回一个抽象路径名数组,这些路径名表示此抽象路径名表示的目录中满足指定过滤器的文件和目录
7.字符流和字节流
I/O流
在Java中,文件的输入输出是通过流来实现的,用来实现程序或进程间的通信,或读写外围设备、外部文件等。
一个流必须有源端和目的端,它们可以是计算机内存的某些区域,也可以是磁盘文件,甚至是Intenet上某个URL。对于流而言,不用关心数据是如何传输的,只需要向源端输入数据,从目的端接收数据即可.
如何理解输入输出呢?
简单地说:你听别人说话就是输入,你开口跟别人说话就是输出。在计算机的世界中,输入Input 和输出Output 都是针对计算机的内存而言。比如:读取计算机硬盘上的一个文件对于内存而言就是输入;向控制台打印输出一句话就是出书。所以将这类方法叫做输入输出即 I / O
流是对IO操作的形象描述,信息从一处转移到另一处就叫做 I/O 流
输入流的抽象表示形式是接口InputStream;输出流的抽象表示形式是接口OutputStream
System.out.println() 是典型的输出流,向控制台输出信息
new Scanner(System.in) 是典型的输入流duq控台输入的信息 它们两者是InputStream 和OutputStream 的实例对象
字符流和字节流的区别
按照处理数据的单位,流可以分为字节流和字符流。字节流的处理的单位是字节,通常用来处理二进制文件,如文件,图片文件。而字符流的处理单位是字符,因为Java采用Unicode 编码 Java字符流处理的即Unicode字符,所以在操作汉字、国际化方面字符流具有优势
8.字节流
所有的字节流类都