为什么要使用I/O技术
在变量、数组和对象中存储的数据是暂时存在的,程序结束后它们就会丢失。为了能够永久的保存程序创建的数据,需要将其保存在磁盘文件中,这样以后就可以在其他程序中使用它们。
为了对文件进行操作,Java本身提供了一个API,就是java.io.File类,使用这个类来访问文件属性
而在jdk1.7之后又提供了一个功能更强大的API:java.nio.file.Files
File类并不用来进行文件的读/写操作,它用来描述文件对象的属性,既可以表示文件,也可以表示目录。使用它提供的方法,我们可以得到所指对象的描述信息,包括名称、存在否、读/写权限、路径等等。
(注意:在windows环境中使用路径是不能用\分隔符,这个符号已经被转义了,应使用\\或/例如D:\\java\\b.txt或D:/java/b.txt)
创建文件并输出文件属性
public class FileTest {
public static void main(String[] args) {
String path = new String(new Scanner(System.in).nextLine());//获取控制台输入的文件名路径
File file = new File(path);//用获得的路径实例一个File对象
if (!file.exists()) {//判断文件是否存在
System.out.println("文件不存在,正在创建文件");
try {
file.createNewFile();//新建一个文件
System.out.println("文件创建成功");
} catch (IOException e) {
// TODO 自动生成的 catch 块
e.printStackTrace();
System.out.println("文件创建失败");
}
}else{
System.err.println(file.getName());//输出文件的名字
System.out.println(new Date(file.lastModified()));//输出文件最后的修改时间
System.out.println(file.getAbsolutePath());//输出文件的绝对路径
}
}
}
显示某个目录下的文件、目录信息
public class DirTest {
public static void main(String[] args) {
File dir = new File(System.getProperty("user.dir"));//获取用户目录
System.out.println("当前目录是:"+dir.getAbsolutePath());
File FileOrDirlist[] = dir.listFiles();
for (int i = 0,j = FileOrDirlist.length; i < j; i++) {
if(FileOrDirlist[i].isDirectory()){
System.out.println("子目录:"+FileOrDirlist[i].getName());
}else{
System.out.println("文件:"+FileOrDirlist[i].getName()+",大小:"+FileOrDirlist[i].length()
+ "字节");
}
}
}
}
FIles(jdk1.7后)暂不多说,具体看API说明。
I/O流:
File类可以创建文件,但并不能访问、操作文件的内容,这个时候用到I/O流。
输入输出是对内存而言,而不是对文件。(输入到内存,输出到文件)
按流传输基本单位,分为两种
①字节流:基本单位是字节(8位)
抽象类:InputStream负责输入流
OutputStream负责输出流
子类命名格式:XxxxInputStream或XxxxOutputStream(FileInputStream/FileOutputStream)
②字符流 (Unicode): 基本单位是 16 位 Unicode 字符抽象类:Reader 负责输入流
Writer负责输出流
子类命名格式:XxxxReader或XxxxWriter(InputStreamReader/OutputStreamWriter)
(
运用BufferedReader和BufferedWriter也可以读写文本文件,且性能较高,因其带有缓冲区
用法:
BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
//用BufferedReader获取输入,System.in是位流,要将其转换成字符流
BufferedWriter bufWriter =
new
BufferedWriter(
new
FileWriter(path
));
(未完待续)