Java精选笔记_IO流【File(文件)类、遍历目录下的文件、删除文件及目录】

File(文件)类
File类用于封装一个路径,该路径可以是从系统盘符开始的绝对路径,也可以是相对于当前目录而言的相对路径

File类内部封装的路径可以指向一个文件,也可以指向一个目录,在使用File类操作文件或者目录之前,首先得创建一个File对象。

创建File对象
1.File f=new File(“c:\abc\a.txt”);//将a.txt封装成FIle对象,可以将已有的和未出现的文件或者文件夹封装成对象。
2.File f=new File(“c:\abc”,”a.txt”); 第一个参数代表的是目录,第二个参数代表的是目录下的文件。

3.file d=new File(“c\abc”); 将路径封装成对象
File f=new File(d,”a.txt”); 调用路径对象

f代表的是文件路径,目录分隔符:

构造方法
File(String pathname) 创建一个指定文件或目录路径的File对象

File(File file, String fileName)  创建一个由File对象和指定文件名表示的File对象
File(String filePath, String fileName)   创建一个指定文件目录路径和文件名的File对象

File类的常用方法
1.创建

boolean createNewFile():

在指定位置创建文件,如果该文件已经存在,则不创建,返回false
和写入流不一样,写入流创建文件会覆盖已经存在的文件。

File f=new File("a.txt");

f.createNewFile();

创建一级目录 
File dir=new File("abc");

dir.mkdir();

创建多级目录
dir.mkdirs();

2.删除
boolean f.delete();
删除失败,返回false,可能不能删除

void deleteOnExit();
在程序退出时,删除指定文件。必须删除。不会失败

3.判断 :在判断文件对象是都是文件或者目录的时候,必须要先判断该文件对象封装的内容是否存在。
boolean canRead()
判断文件是否可读,可读则返回真,否则返回假

boolean canWrite()

判断文件是否可写,可写则返回真,否则返回假
boolean exists()
判断文件是否是指定路径中的文件或目录,是则返回真,否则返回假

boolean isFile()

判断File的对象是否是文件,是则返回真,否则返回假

boolean isDirectory()

判断File的对象是否是目录,是则返回真,否则返回假

boolean isAbsolutePath()

判断File的对象是否是一个文件或目录的绝对路径,是则返回真,否则返回假
File f=new File(“a.txt”);

f.canExecute(); 是否能执行。

f.exits();返回boolean 文件是否存在
是否是目录 
f.isDirectory();

是否是文件
f.isFile();

是否是隐藏的
f.isHidden();

是否是绝对路径

f.isAbsolute();

4.获取信息。

getName() //获取名称
getpath() //获取路径

getAbsolutePath() //获取绝对路径
getParent() //获取绝对路径下的父路径,如果获取的是相对路径返回null,如果相对路径中由上一级目录,该目录就是结果。

lastModified()//获取最后一次修改时间
length();//获取体积大小

public String getParent()
获取文件父目录名字。如果没有指明父目录返回null

public int hashCode()
返回路径名的哈希码

public long lastModified()
获取文件最近一次修改时间(单位毫秒)
5.其他

renameTo();改名,重命名,如果修改路径的话,同时路径也会修改

f1.renameTo(f2);
listRoots();返回 File 数组,列出可用的文件系统根(盘符)

例子:
File[] files=File.listRoots();
for(File f: files) {

        sop(f)
    }

list():返回当前目录下所有文件,包括子目录

File f=new File("abc");

String[] namess=f.list();//调用list方法的file对象必须封装了一个目录,把那个目录必须存在
for(String f: names) {

    sop(f)
}
//显示.bmp结尾的文件
list(FilenameFilter Filter) 返回String[]  指定目录中满足制定过滤器的文件和目录
    File dir=new File("abc");

     String[] namess=f.list(new FilenameFileter()

          public boolean accept(File dir,String name) {

              return name.endsWith(".bmp");
          }

     );
     for(String f: names) {

          sop(f);
     }

     //listFiles();返回当前路径下的文件对象。(不包括子目录)  

     FIle dir=new File("c:\\"); 

     File[] files=dir.listFiles();
     for(File f : files) {

         sop (f.getname())

     }

遍历目录下的文件
如果希望获取指定类型的文件,可以使用重载的list(FilenameFilter)方法。

list(FilenameFilter filter)方法的工作原理:
1、调用list()方法传入FilenameFilter文件过滤器对象

2、取出当前File对象所代表目录下的所有子目录和文件

3、对于每一个子目录或文件,都会调用文件过滤器对象的accept(File dir,String name)方法,并把代表当前目录的File对象以及这个子目录或文件的名字作为参数dir和name传递给方法

4、如果accept()方法返回true,就将当前遍历的这个子目录或文件添加到数组中,如果返回false,则不添加。

列出指定目录下所有内容:使用递归 。。函数自己调用自己

    File dir=new File("d:\\");

    sop(dir);

    File[]  files=dir.listFiles();

    for(int x=0;x<files.length;x++) {

        if(files[x].isDirectory)

           showDir(files[x]);

        else
            System.out.println(files[x]);

      }

将一个指定目录下的jva文件的绝对路径,存储到一个文本文件中。
思路:

1.对指定目录进行递归
2.获取递归过程中所有以JAVA文件的路径

3.将这些目录存储到集合中,将集合中的数据写入到一个文件中。

删除文件及目录
File类提供了delete()方法删除文件,但该方法无法删除目录,因此,要想删除文件及目录,需要通过递归的方式将整个目录以及其中的文件全部删除。

删除一个带内容的目录

原理:从里面往外删除,就需要递归

    File dir=new File("d:\\");

    File[] files=dr.listFiles();
    for(int x=0;x<files.length;x++) {

        if(files[x].isDirectory())

            removeDir(files[x]);

            sop(files[x].toString()+":-file-:"+files[x].delete(););
    }
    sop(dir+":-dir-:"+dir.delete();)

RandomAccessFile

RandomAccesseFile不属于流类,但具有读写文件数据的功能,可以随机地从文件的任何位置开始执行读写数据的操作

RandomAccessFile可以将文件以只读或者读写的方式打开,具体使用哪种方式取决于创建它所采用的构造方法

RandonAccessFile(String file,string mode)参数file指定被访问的文件

RandonAccessFile(String name,string mode)参数name指定被访问文件的路径

mode的具体值
r 以只读方式打开。调用该对象的任何write方法都会导致抛出IOException异常
rw 打开以便读取和写入,若该文件不存在则尝试创建
rws 打开以便读取和写入,与rw不同的是还要求对文件的内容的每个更新都同步写入到基础存储设备中去
rwd 打开以便读取和写入,与rw不同的是还要求对文件内容的每个更新都同步写入到基础存储设备中去
RandomAccessFile类针对文件的随机访问操作,提供了一些用于定位文件位置的方法
long getFilePointer() 返回当前读写指针所处的位置
void seek(long pos) 设定读写指针的位置,与文件开头相隔pos个字节数
int skipBytes(int n) 使读写指针从当前文职开始,跳过n个字节
void setLength(long newLength) 设置此文件的长度

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
文件上传是Web开发常见的功能之一,Java也提供了多种方式来实现文件上传。其,一种常用的方式是通过Apache的commons-fileupload组件来实现文件上传。 以下是实现文件上传的步骤: 1.在pom.xml文件添加以下依赖: ```xml <dependency> <groupId>commons-fileupload</groupId> <artifactId>commons-fileupload</artifactId> <version>1.3.3</version> </dependency> ``` 2.在前端页面添加文件上传表单: ```html <form method="post" enctype="multipart/form-data" action="upload"> <input type="file" name="file"> <input type="submit" value="Upload"> </form> ``` 3.在后台Java代码处理上传文件: ```java // 创建一个DiskFileItemFactory对象,用于解析上传的文件 DiskFileItemFactory factory = new DiskFileItemFactory(); // 设置缓冲区大小,如果上传的文件大于缓冲区大小,则先将文件保存到临时文件,再进行处理 factory.setSizeThreshold(1024 * 1024); // 创建一个ServletFileUpload对象,用于解析上传的文件 ServletFileUpload upload = new ServletFileUpload(factory); // 设置上传文件的大小限制,这里设置为10MB upload.setFileSizeMax(10 * 1024 * 1024); // 解析上传的文件,得到一个FileItem的List集合 List<FileItem> items = upload.parseRequest(request); // 遍历FileItem的List集合,处理上传的文件 for (FileItem item : items) { // 判断当前FileItem是否为上传的文件 if (!item.isFormField()) { // 获取上传文件文件名 String fileName = item.getName(); // 创建一个File对象,用于保存上传的文件 File file = new File("D:/uploads/" + fileName); // 将上传的文件保存到指定的目录 item.write(file); } } ``` 以上代码,首先创建了一个DiskFileItemFactory对象,用于解析上传的文件。然后设置了缓冲区大小和上传文件的大小限制。接着创建一个ServletFileUpload对象,用于解析上传的文件。最后遍历FileItem的List集合,判断当前FileItem是否为上传的文件,如果是,则获取文件名,创建一个File对象,将上传的文件保存到指定的目录。 4.文件上传完成后,可以给用户一个提示信息,例如: ```java response.getWriter().write("File uploaded successfully!"); ``` 以上就是使用Apache的commons-fileupload组件实现文件上传的步骤。需要注意的是,文件上传可能会带来安全隐患,因此在处理上传的文件时,需要进行严格的校验和过滤

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值