为什么要使用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说明。①字节流:基本单位是字节(8位)
抽象类:InputStream负责输入流
OutputStream负责输出流
子类命名格式:XxxxInputStream或XxxxOutputStream(FileInputStream/FileOutputStream)
②字符流(Unicode):基本单位是16位Unicode字符抽象类:Reader 负责输入流
Writer负责输出流
子类命名格式:XxxxReader或XxxxWriter(InputStreamReader/OutputStreamWriter)