首先先区分一下绝对路径和相对路径。
windows相对路径和绝对路径举例
绝对路径:是从盘符开始的路径,形如C:\windows\system32\cmd.ex
相对路径: 是从当前路径开始的路径,如当前路径为C:\windows,要描述上述路径,只需输入入system32\cmd.exe 。
File
常用方法:
实例:
File file = new File("example.txt");
System.out.println("文件名称:" + file.getName());
System.out.println("文件的相对路径:" + file.getPath());
System.out.println("文件的绝对路径:" + file.getAbsolutePath());
System.out.println("文件的父路径:" + file.getParent());
System.out.println(file.canRead() ? "文件可读" : "文件不可读");
System.out.println(file.canWrite() ? "文件可写": "文件不可写");
System.out.println(file.isFile() ? "是一个文件" :"不是一个文件");
System.out.println(file.isDirectory()? "是一个目录":"不是一个目录");
System.out.println(file.isAbsolute() ? "是绝对路径": "不是绝对路径");
System.out.println("最后修改时间为:" + file.lastModified());
System.out.println("文件大小为:" + file.length() + " bytes");
System.out.println("是否成功删除文件"+file.delete());
课上实例
public static void main(String [] args) throws IOException
{
File file =new File("D:\\java");
if(file.exists())
file.delete();
System.out.println(file.getName());//获取最后文件的名字
else
file.createNewFile();//如果文件不存在,创建文件
//另一种写法
if(!file.exists())
{
fie.mkdir();//创建此文件夹
}
else{
System.out.println("文件夹已存在");
}
System.out.println(file.getParentFile());//返回文件的父路径
System.out.println(file.getAbsolutePath());//返回文件的绝对路径(盘符路径)
System.out.println(file.length());//文件的大小
//时间类
Date d=new Date(file.lastModified());//创建Date对象将毫秒差值输入
SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd");//构建输出格式
System.out.println(sdf.format(d));
String [] str=file.list();//列出文件名称
for(String e:str)
System.out.println(e);*/
fileDir(file);
}
public static void fileDir(File file) {
File[] listFiles = file.listFiles();
for (File files : listFiles) {
if(files.isDirectory())//判断是否是文件夹
{
fileDir(files);
}
System.out.println(files);
}
}
递归遍历目录下的文件
public static void main(String[] args){
File file = new File(" F:\\Java基础入门\\workspace\\chapter07");
fileDir(file);
}
public static void fileDir(File file) {
File[] listFiles = file.listFiles();//listFile()方法返回的是一个File对象数组
for (File files : listFiles) {
if(files.isDirectory()){
fileDir(files);
}
System.out.println(files);
}
}
递归删除目录下文件
public static void main(String[] args){
File files = new File("D:\\test\\新建文件夹");
deleteDir(files);
}
public static void deleteDir(File files) {
File[] listFiles = files.listFiles();
for (File file : listFiles) {
if(file.isDirectory()){
deleteDir(file);//递归调用删除目录方法
}
file.delete();//直接删除文件
}
files.delete();//最后删除最外层目录
}
RandomAccesseFile
说明: 在IO包中,提供了一个RandomAccesseFile类,它不属于流类,但具有读写文件数据的功能,可以随机从文件的任何位置开始并以指定的操作权限(如只读、可读写等)执行读写数据的操作。
构造方法:
参数mode取值:
r: 以只读的方式打开文件。如果执行写操作,会报IOException异常。
rw: 以“读写”的方式打开文件。如果文件不存在,会自动创建该文件。
rws: 以“读写”方式打开文件。与“rw”相比,它要求对文件的内容或元数据的每个更新都同步写入到底层的存储设备。
rwd: 以“读写”方式打开文件。与“rw”相比,它要求对文件的内容的每个更新都同步写入到底层的存储设备。
RandomAccessFile常用方法:
说明: seek(long pos)方法可以使RandomAccessFile对象中的记录指针向前、向后自由移动,通过getFilePointer()方法,便可获取文件当前记录指针的位置。
示例(模拟软件使用次数):
RandomAccessFile raf = new RandomAccessFile("time.txt", "rw");
int times = Integer.parseInt(raf.readLine())-1;
if(times > 0){
System.out.println("您还可以试用"+ times+"次!");
raf.seek(0); // 将记录指针重新指向文件开头
raf.write((times+“”).getBytes()); // 将剩余次数再写入文件
}else{
System.out.println("试用次数已经用完!");
}
raf.close();
示例:
public static void main(String [] args) throws IOException
{
RandomAccessFile raf=new RandomAccessFile("d:\\java\\demo1.txt", "rw");
int times=Integer.parseInt(raf.readLine())-1;
if(times>0)
{
System.out.println("你还可以使用"+times+"次");
raf.seek(0);
raf.write((times+"").getBytes());
}
else
System.out.println("使用结束!");
}
对象序列化
对象序列化有什么作用?
程序在运行过程中,可能需要将一些数据永久的保存到磁盘上,而数据在Java中都是保存在对象当中的。那么我们要怎样将对象中的数据保存到磁盘上呢?这时就需要使用Java中的对象序列化。
定义: 对象的序列化(Serializable)是指将一个Java对象转换成一个I/O流中字节序列的过程。
目的: 为了将对象保存到磁盘中,或允许在网络中直接传输对象。
说明:
对象序列化可以使内存中的Java对象转换成与平台无关的二进制流;
既可以将这种二进制流持久地保存在磁盘上,又可以通过网络将这种二进制流传输到另一个网络节点;
其他程序在获得了这种二进制流后,还可以将它恢复成原来的Java对象;
这种将I/O流中的字节序列恢复为Java对象的过程被称之为反序列化(Deserialize)。