Java中的“流”都位于java.io包中,称为IO(输入/输出)流
IO流有很多种,按照操作数据的不同,可以分为字节流和字符流,按照数据传输方向的不同又可分为输入流和输出流,
程序从输入流中读取数据,向输出流中写入数据。
说一说File:
File:文件或目录(文件夹) 路径名的抽象表示形式
构造方法:
File(File parent, String child): 根据一个父File对象和一个子文件[目录]得到File对象
File(String pathname):根据一个路径得到File对象
File(String parent, String child):根据一个目录和一个子文件[目录]得到File对象
例子:
public static void main(String[] args) throws IOException {
//File(String pathname):根据一个路径得到File对象
//这里是讲文件或者目录路径 变为对象, 因为Java中只认识对象,不认"E:\\demo\\a.txt" 这个东西只是字符串,不是真正的文件对象
File f = new File("E:\\demo\\a.txt");// 需要路径格式 E:\\demo 这里的 \\ 等于win系统中的一个\ 或者 /
System.out.println(f);
//File(String parent, String child):根据一个目录和一个子文件[目录]得到File对象
File f2 = new File("e:/demo", "a.txt");//磁盘名不区分大小写
System.out.println(f2);
//File(File parent, String child): 根据一个父File对象和一个子文件[目录]得到File对象
File f3 = new File("e:/demo.txt/ys");//表示是一个目录
File f4 = new File(f3, "a.txt");
System.out.println(f4);
//以上三个的作用是一模一样的
}
File的功能:
-
创建功能:
-
public boolean createNewFile():创建文件, 如果存在这样的文件,就不创建
-
public boolean mkdir():创建文件夹,如果存在这样的目录,就不创建
-
public boolean mkdirs():创建文件夹,如果父目录不存在,则帮你创建
例子:
public static void main(String[] args) throws IOException {File f = new File("E:/demo/b"); try { System.out.println(f.createNewFile()); } catch (IOException e) { e.printStackTrace(); } File f2 = new File("E:/demo/c.txt"); System.out.println(f2.mkdir()); File f3 = new File("e:/javaTest/b/e"); System.out.println(f3.mkdirs()); //mkdirs():注意:只要有一个目录不存在就返回的是true,都是存在则是false //需求:在e盘下的javaTest下的demo目录下创建一个hello.txt; File f4 = new File("e:/javaTest/demo"); f4.mkdirs(); File f5 = new File(f4, "hello.txt"); f5.createNewFile(); /* * /: 表示根路径 在windos中就是磁盘路径 * */ File f6 = new File("/demo/src");//相对项目目录下创建 System.out.println(f6); f6.mkdirs();
}
-
删除功能:
-
public boolean delete():
-
需要注意的是:
-
A.如果你创建文件或者目录忘了写盘符路径,那么默认下项目目录路径下
-
B.Java中的删除是不走回收站的
-
C.要删除一个目录,请注意该目录内不能包含目录或者文件(这点需要特别注意)
例子:
public static void main(String[] args) {
File f4 = new File("e:/javaTest/demo");
File f5 = new File(f4, "hello.txt");
System.out.println(f5.delete());//删除成功
File f3 = new File("e:/javaTest");
System.out.println(f4.delete());//删除失败,看注意的第三点!
}
- 重命名功能:
- public boolean renameTo(File dest)
-
如果路径名相同,就是改名
-
如果路径名不相同,就是改名并剪切
例子:
public static void main(String[] args) {
File f = new File("E:\\javaTest\\demo");
File ff = new File("E:\\javaTest");
File f1 = new File(f,"3.jpg");
boolean renameTo = f1.renameTo(new File(ff,"大镁铝.jpg"));
System.out.println(renameTo);
}
-
判断功能:
-
public boolean isDirectory():判断是否是目录
-
public boolean isFile():判断是否是文件
-
public boolean exists():判断是否存在
-
public boolean canRead():判断是否可读
-
public boolean canWrite():判断是否可写
-
public boolean isHidden():判断是否隐藏
例子:
public static void main(String[] args) {File f = new File("E:\\javaTest\\demo"); File f1 = new File(f, "1"); System.out.println(f1.isDirectory());//false System.out.println(f1.isFile());//true System.out.println(new File("e:\\aa").exists());//false System.out.println(f1.exists());//true System.out.println(f.exists());//true System.out.println(f1.canRead());//true System.out.println(f1.isHidden()); System.out.println(f1.canWrite());
}
-
获取功能:
-
public String getAbsolutePath():获取绝对路径
-
public String getPath():获取相对路径
-
public String getName():获取名称
-
public long length():获取长度,字节数
-
public long lastModified():获取最后一次的修改的时间,毫秒数
-
public String[] list():获取指定目录下的所有文件或者目录的名称数组
-
public File[] listFiles():获取指定目录下的所有文件或者目录的File数组
例子:
public static void main(String[] args) {
File f1 = new File(“E:\不要再打了”);
File f2 = new File(f1,“a.txt”);System.out.println(f1.isDirectory());//判断f1是否为目录 System.out.println(f2.isFile());//判断f2是否为文件 String path = f1.getPath(); //获得相对路径 System.out.println(path); String absolutePath = f1.getAbsolutePath();//获得绝对路径 System.out.println(absolutePath); long lastModified = f2.lastModified(); //返回的是一个毫秒值 Date date = new Date(lastModified); String format = new SimpleDateFormat("yyyy-MM-d HH-mm-ss").format(date); System.out.println(format); String[] list = f1.list();//获取指定目录下的所有文件或者目录的名称数组 List<String> asList = Arrays.asList(list); //将数组变为集合直接输出 System.out.println(asList); //System.out.println(Arrays.toString(list));//一维数组也可以直接输出,利用Arrays.toString方法 File[] listFiles = f1.listFiles();//获取指定目录下的所有文件或者目录的File数组 for (File file : listFiles) { System.out.println(file.getName()); }
}
*文件过滤器: -
public String[] list(FilenameFilter filter)
-
public File[] listFiles(FilenameFilter filter)
练习兼例子:
判断E盘目录下是否有后缀名为.jpg的文件,如果有,就输出该文件名称
public static void main(String[] args) {
File f = new File("e://a");
File[] listFiles = f.listFiles();
for (File file : listFiles) {
if(file.isFile()){
if(file.getName().endsWith(".jpg")){
System.out.println(file.getName());
}
}
}
}
2.
public static void main(String[] args) {
File f = new File("e://a");
String[] arrays = f.list(new FilenameFilter() {
@Override
public boolean accept(File dir, String name) {
// TODO Auto-generated method stub
//System.out.println(dir+","+name);
//dir 表示就是指定的目录 name:指定目录下的子目录或者文件的名称
File f1 = new File(dir, name);
if(f1.isFile()&&name.endsWith(".jpg")){
return true;
}
return false;
//return new File(dir,name).isFile() && name.endsWith(".jpg"); 也可以这样简写
}
});
for (String string : arrays) {
System.out.println(string);
}
}
切记的是Java是不认识“e:/a/b”这种路径的,它只认识对象,所以我们要利用对象来操作。