文件操作
- File, 文件, 用于进行文件/目录相关操作 java.io.File
- File对象用于指代一个文件或目录
File f = new File("e:/examples/abc.txt");
注意:
- 路径可以用斜线(推荐),也可以用反斜线
"e:/examples/abc.txt"
"e:\\examples\\abc.txt" ( 要转义 )
- File就是一个工具类, new File()的时候并不是要创建这个文件
package my;
import java.io.File;
import java.text.SimpleDateFormat;
import java.util.Date;
public class Test
{
public static void main(String[] args)
{
File f=new File("d:/abc.txt");
if(f.exists())
System.out.println("存在!"+f);
else
System.out.println("不存在!"+f);
if(f.isFile())
System.out.println("它是一个文件!"+f);
if(f.isDirectory())
System.out.println("它是一个目录!"+f);
long size=f.length();//文件大小
long lastModified=f.lastModified();//最后修改时间
SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
System.out.println("大小:"+size);
System.out.println("最后修改时间:"+sdf.format(new Date(lastModified)));
f.renameTo(new File("d:/abcd.txt"));//重命名
System.out.println("Exit.");
}
}
目录操作
- File, 既可以代表一个文件,也可以代表一个目录。 File d = new File("e:/examples/videos");
创建层级目录 f.mkdirs();
- 如果目录不存在,则创建目录
- 创建层次目录,路径中的每一级都会被自动创建
package my;
import java.io.File;
public class Test
{
public static void main(String[] args)
{
File f=new File("d:/a/b/c/d");
f.mkdirs();
System.out.println("Exit.");
}
}
- 使用listFiles() 可以遍历目录下的子目录/文件
注:仅一级目录
package my;
import java.io.File;
public class Test
{
public static void main(String[] args)
{
File f=new File("D:\\JavaProjects");
File[] listFiles=f.listFiles();
for(File ff : listFiles)
{
if(ff.isFile())
System.out.println("发现文件:"+ff);
if(ff.isDirectory())
System.out.println("发现目录:"+ff);
}
System.out.println("Exit.");
}
}
可以在listFilter的时候设置一个过滤器,查找d盘下的后缀为 .txt 的文件
package my;
import java.io.File;
import java.io.FileFilter;
public class Test
{
public static void main(String[] args)
{
File f=new File("d:/");
File[] listFiles=f.listFiles(new FileFilter() {
@Override
public boolean accept(File pathname)
{
if(pathname.getAbsolutePath().endsWith(".txt"))
return true;
return false;
}
});
for(File ff : listFiles)
{
if(ff.isFile())
System.out.println("发现文件:"+ff);
if(ff.isDirectory())
System.out.println("发现目录:"+ff);
}
System.out.println("Exit.");
}
}
递归遍历子目录
package my;
import java.io.File;
public class Test
{
public static void main(String[] args)
{
File f=new File("D:\\JavaProjects");
bianli(f);
System.out.println("Exit.");
}
//遍历
public static void bianli(File f)
{
File[] listFiles=f.listFiles();
for(File ff : listFiles)
{
if(ff.isFile())
System.out.println("发现文件:"+ff);
if(ff.isDirectory())
{
System.out.println("发现目录:"+ff);
bianli(ff);
}
}
}
}
在 new File()时可以指定其父目录
File homeDir=new File("d:/test");
File f=new File(homeDir, "abc.txt");
File是一个轻量级对象,不必转成String,File和文件本身没什么关系,仅含有路径信息。
相对路径与绝对路径
- 绝对路径
当指定一个文件/目录的位置时,可以用绝对路径 ,例如 File d = new File("e:/examples/videos");
绝对路径:从根目录开始指定
C:/hello.txt
C:/program files/office/
E:/JavaProjects/example1203/src/my/Test.java
- 相对路径
也可以指定一个相当于当前目录的路径 ,例如: File f = new File("src/my/Test.java");
当前目录 E:/JavaProjects/example1203
完整路径: (当前目录 + 相对路径)
E:/JavaProjects/example1203/src/my/Test.java
- 相对路径举例
./data/config.txt
../example1101/src
../../WebProjects/
./src/../data/config.txt
其中 . 表示本目录 .. 表示父目录
- 工作目录 Working Directory
我们所说的当前路径,指的是程序的工作目录 。默认地,工作目录是程序运行时的起始目录。
注:工作目录并不是class文件所在的目录 ,在Eclipse | Run Configuration里可以指定
- 在代码里获取/修改当前的工作目录
// 查询当前的工作目录
String workDir = System.getProperty("user.dir");
// 修改工作目录
System.setProperty("user.dir", "d:");
复制与移动
使用第三方的库来完成文件和目录复制与移动操作 http://apache.org/
使用的是 commons-io-2.4.jar
- 常见文件操作
FileUtils 类支持常见的文件和目录操作 例如,
FileUtils.deleteQuietly() 删除文件
FileUtils.copyFile() 复制文件
FileUtils.copyFileToDirectory() 复制文件到目录
FileUtils.moveFile() 移动文件
FileUtils.moveDirectory() 移动目录
package my;
import java.io.File;
import java.io.IOException;
import org.apache.commons.io.FileUtils;
public class Test
{
public static void main(String[] args)
{
File from=new File("d:/abc.txt");
File to=new File("d:/abc-副本.txt");
try
{
FileUtils.copyFile(from, to);//文件复制
} catch (IOException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println("Exit.");
}
}