File类介绍和路径分隔符:
File类是IO包中唯一表示磁盘文件和磁盘目录的对象的路径.
该类包含了创建,删除文件,重命名文件,判断文件读写权限以及文件是否存在,查询等功能方法.
只能设置和获取文件本身的信息,不能设置和获取文件的内容.
路径分隔符,属性分隔符:
Unix: 使用”/”,来分割目录路径. 使用:来分割属性.
Windows: 使用”\”,来分割目录路径.但是在Java中一个”\”表示转义,在Windows平台的Java代码中表示一个路径,就得使用两个\. 但是Windows支持/. 使用;来分割属性.
因为我们不知道以后运行的系统平台是什么,就不知道该如何编写分隔符的问题,因此在File类中提供了两类常量,分别来表示路径分隔符和属性分隔符.
//路径分隔符
System.out.println(File.pathSeparatorChar);
System.out.println(File.pathSeparator);
//属性分隔符
System.out.println(File.separatorChar);
System.out.println(File.separator);
获取File路径和检测状态:
操作File路径和名称:
File getAbsoluteFile() :获取绝对路径
String getAbsolutePath():获取绝对路径
String getPath() :获取文件路径
String getName() :获取文件名称
File getParentFile():获取上级目录文件
String getParent() :获取上级目录路径
检测File状态的方法:
boolean canExecute() :判断是否是可执行文件
boolean canRead() :判断该文件是否可读
boolean canWrite():判断该文件是否可写
boolean isHidden():判断该文件是否是隐藏文件
long lastModified():判断该文件的最后修改时间
long length():获取该文件的长度大小(单位字节)
File类中方法-文件操作:
boolean isFile() :是否是文件
boolean createNewFile() :创建新的文件
static File createTempFile(String prefix, String suffix) :创建临时文件
boolean delete() :删除文件
void deleteOnExit() :在JVM停止时删除文件
boolean exists():判断文件是否存在
boolean renameTo(File dest) :重新修改名称
File类中方法-目录操作
boolean isDirectory() :判断是否是目录
boolean mkdir() :创建当前目录
boolean mkdirs() :创建当前目录和上级目录
String[] list() :列出所有的文件名
File[] listFiles() :列出所有文件对象
static File[] listRoots() :列出系统盘符
需求:列出指定目录中所有的文件,包括子文件夹中的所有文件(使用递归算法(recursion)).
public class test {
public static void main(String[] args) {
File file = new File("c:/p2p");
listFile(file);
}
private static void listFile(File file) {
File[] files = file.listFiles();
for (File f : files) {
if (f.isDirectory()) {
listFile(f);
}else{
System.out.println(f.getName());
}
}
}
}
需求:java读取文件
public static void main(String[] args) throws Exception {
//创建源
File file=new File("D:/user.txt");
//创建文件字节输入流对象
InputStream in=new FileInputStream(file);
//int len=in.read(); 65
byte[] bb=new byte[30];
int len=-1;
while((len=in.read(bb))!=-1){
System.out.println(new String(bb,0,len));
}
//关闭对象
in.close();
}
注意 以上如果读出部分中文乱码,这是因为一个汉字是2-4字节,而空格,符号,英文是0.5个字节,有可能是读到了半个汉字,就会出现这种结果
*处理方式 : 将字节流转换成字符流*
try {
// 创建源
File file = new File("D:/user.properties");
// 创建文件字节输入流对象
InputStream in = new FileInputStream(file);
InputStreamReader ir = new InputStreamReader(in);
char[] cc = new char[30];
int len = -1;
String str="";
while ((len = ir.read(cc)) != -1) {
str+=new String(cc, 0, len);
}
// 关闭对象
in.close();
System.out.println(str);
for(String s :str.trim().split(";")){
String[] ss = s.trim().split(":");
window.users.put(ss[0].replace(" ", ""), ss[1].replace(" ", ""));
}
} catch (Exception e) {
e.printStackTrace();
}
需求:java输出文件
public static void main(String[] args) throws Exception {
//创建输出的目标文件 out.txt
File file=new File("C:/abc/out.txt");
//创建文件字节输出对象
FileOutputStream out=new FileOutputStream(file, false);
out.write(65);
out.write("Zoe KV ZSDN ".getBytes());
out.write("ABBBBBBBB".getBytes(), 1, 8);
out.close();
}
使用字节流拷贝文件
public static void main(String[] args) {
InputStream in = null;
OutputStream out = null;
try {
//创建文件源
File file = new File("C:/abc/abc.txt");
//目标文件
File file_copy = new File("C:/abc/abc_Copy.txt");
//字节码输入流
in = new FileInputStream(file);
//字节码输出流
out = new FileOutputStream(file_copy);
//操作
byte[] buf = new byte[10];
int len = 0;
while ((len = in.read(buf)) != -1) {
System.out.println(new String(buf, 0, len));
out.write(buf, 0, len);
}
} catch (Exception e) {
// TODO: handle exception
}
//关闭流操作
try {
if (in != null) {
in.close();
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
try {
if (out != null) {
out.close();
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
过滤文件
public static void main(String[] args) {
File file=new File("C:/abc");
File[] files=file.listFiles(new FileFilter() {
public boolean accept(File pathname) {
return pathname.toString().contains(".avi");
}
});
for (File f : files) {
System.out.println(f);
}
//C:\abc\a.avi
//C:\abc\aa.avi
}