JAVA基础初探(十二)Map接口及其常用实现类(HashMap)、File类详解(概述、创建、删除、重命名、文件属性读取/设置、遍历文件夹)

本文主要介绍了Java中Map接口及其两种实现类HashMap和Hashtable的使用方法,并详细阐述了File类的操作,包括文件和目录的创建、删除、重命名等,以及文件属性的读取与设置。

该篇博客目录

1、Map接口及其常用实现类(HashMap、Hashtable)
2、File类(概述、创建、删除、重命名、文件属性读取/设置、遍历文件夹)

一、Map接口及其常用实现类(HashMap、Hashtable)

1、Map接口保存形式(键值对)

key—>value的方式保存,所以既需要保存key也需要保存value

2、Map常用实现类
  • HashMap:无序存放,key不允许重复(key唯一)
  • Hashtable:无序存放,key不允许重复(key唯一)
3、常用方法,参考api即可,这里我举一个常用的Demo
package hhh;

import java.util.Collection;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;

public class my_hello_world {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Map<String,String> m=new HashMap();
        //添加键值对
        m.put("key1", "value1");
        m.put("key2", "value2");
        m.put("key3", "value3");
        m.put("key4", "value4");

        //获得key1的内容
        String str=m.get("key1");
        System.out.println(str);

        //判断键或值是否存在
        if(m.containsKey("key1"))
        {
            System.out.println("key1存在");
        }else {
            System.out.println("key1不存在");
        }
        if(m.containsValue("value1"))
        {
            System.out.println("value1存在");
        }else {
            System.out.println("value1不存在");
        }


        //得到全部的键或值keySet方法(获得键返回类型是Set,获得值返回类型是Collection)

        //获得键
        Set<String> s=m.keySet();
        Iterator<String> i=s.iterator();
        while(i.hasNext())
        {
            System.out.println(i.next());
        }


        //获得值
        Collection<String> p=m.values();
        Iterator<String> u=p.iterator();
        while(u.hasNext())
        {
            System.out.println(u.next());
        }
    }
}

这里写图片描述


二、File类

1、File类概述

文件和目录路径名的抽象表示形式。

2、File类对文件创建、删除、重命名
a、需要用到的方法
  • 创建File类对象方法
    这里写图片描述

  • exists():判断文件是否存在

  • renameTo(File dest);:重命名文件,参数是新文件名创建的对象
  • getName();:得到文件名属性
  • isFile():是否是标准文件名
  • isDirectory():是否是标准目录
  • delete();:删除文件
  • createNewFile();:创建文件
b、Demo
package HelloFile;

import java.io.File;
import java.io.IOException;

public class testFile {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        File f=new File("hello.txt");


        if(f.exists())
        {

            File newf=new File("newfile.txt");
            //文件夹结构必须处于同一个分区
            f.renameTo(newf);
            System.out.println(f.getName());

            if(f.isFile())
            {
                System.out.println("是标准文件名");
            }
            if(f.isDirectory())
            {
                System.out.println("是目录");
            }
            f.delete();
            System.out.println("文件删除成功");
        }
        else {
            System.out.println("文件不存在");
            try {
                f.createNewFile();
                System.out.println("文件已成功创建");
            } catch (IOException e) {
                // TODO Auto-generated catch block
                System.out.println("文件无法创建");
            }
        }
    }

}

这里写图片描述

这里写图片描述


2、File类文件属性读取
a、需要用到的方法
  • exists():文件是否存在
  • getName():读取文件名
  • getPath():读取文件路径
  • getAbsolutePath():读取文件绝对路径
  • new File(f.getAbsoluteFile().getParent()):获取文件父级路径
  • length():读取文件大小,按字节计算
  • isHidden():判断文件是否被隐藏
  • canRead():判断文件是否可读
  • canWrite():判断文件是否可写
  • isDirectory():判断是否为文件夹
b、Demo
package HelloFile;

import java.io.File;

public class HelloFile2 {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        File f=new File("fi.txt");
//      判断文件是否存在
        System.out.println("判断文件是否存在:"+f.exists());
//      读取文件名称
        System.out.println("读取文件名称:"+f.getName());
//      读取文件路径
        System.out.println("读取文件路径:"+f.getPath());
//      读取文件绝对路径
        System.out.println("读取文件绝对路径:"+f.getAbsolutePath());
//      获取文件父级路径
        System.out.println("获取文件父级路径"+new File(f.getAbsoluteFile().getParent()));
//      读取文件大小
        System.out.println("读取文件大小:"+f.length()+"byte");//按字节计算,长整型
//      判断文件是否被隐藏
        System.out.println("判断文件是否被隐藏:"+f.isHidden());
//      判断文件是否可读
        System.out.println("判断文件是否可读:"+f.canRead());
//      判断文件是否可写
        System.out.println("判断文件是否可写:"+f.canWrite());
//      判断文件是否为文件夹
        System.out.println("判断文件是否为文件夹:"+f.isDirectory());
    }

}

这里写图片描述

3、File类文件属性设置
a、需要用到的方法
  • setWritable(boolean);将文件设为可写//true为可写,false为不可写
  • setReadable(boolean);将文件设为可读//true为可读,false为不可读
  • setReadOnly();将文件设为只读
b、Demo
package HelloFile;

import java.io.File;

public class helloFile3 {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        File f=new File("test.file");
        if(f.exists())
        {
//          将文件设为可写//true为可写,false为不可写
            f.setWritable(true);
//          将文件设为可读//true为可读,false为不可读
            f.setReadable(true);
//          将文件设为只读
            f.setReadOnly();
        }
    }

}

4、File类实现遍历文件夹
a、需要用到的方法
  • isDirectory():是否是文件夹
  • listFiles():包含了当前目录下的子文件和子文件夹,返回的是File对象的数组
b、Demo
package HelloFile;

import java.io.File;

public class hf4 {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        PrintFile(new File("F:\\java\\hello_JAVA"),1);
    }
    public static void PrintFile(File dir,int tab)
    {
        //判断是否是一个文件夹
        if(dir.isDirectory())
        {
            File obj[]=dir.listFiles();//包含了当前目录下的子文件和子文件夹,返回的是File对象的数组
            for(int i=0;i<obj.length;i++)
            {
                for(int j=0;j<tab;j++)
                {
                    System.out.print("|--");
                }
                System.out.println(obj[i].getName());
                //如果是文件夹,则进入该文件夹继续输出
                if(obj[i].isDirectory())
                {
                    PrintFile(obj[i],tab+1);//打印obj[i]自己内部的元素
                }
            }
        }
    }

}

这里写图片描述


5、File类实现文件的读写
a、需要用到的方法

文件读取(File f=new File(“fi.txt”);)

  • FileInputStream fis=new FileInputStream(f);创建文件输入流
  • InputStreamReader isr=new InputStreamReader(fis);获取文件输入流后,将输入流包装成InputStreamRead,是字节流通向字符流的桥梁:它使用指定的 charset 读取字节并将其解码为字符。有些时候还有一个参数是”UTF-8”,根据实际而定
  • BufferedReader br=new BufferedReader(isr);使用BufferedRead,从字符输入流中读取文本,缓冲各个字符,从而实现字符、数组和行的高效读取。
  • readLine():读取内容
  • close();:关闭文件,关闭文件顺序:先打开的后关闭,后打开的先关闭

文件写入(File f2=new File(“newfi.txt”);)

  • FileOutputStream fos=new FileOutputStream(f2);文件输出流是用于将数据写入 File 或 FileDescriptor 的输出流。如果文件不存在,FileOutputStream会创建出来
  • OutputStreamWriter osw=new OutputStreamWriter(fos);OutputStreamWriter 是字符流通向字节流的桥梁
  • BufferedWriter bw=new BufferedWriter(osw);将文本写入字符输出流,缓冲各个字符,从而提供单个字符、数组和字符串的高效写入。
b、文件读写Demo
package HelloFile;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.io.UnsupportedEncodingException;

public class hf5 {

    public static void main(String[] args) {


        /*
         * 
         * 文件的读取
         * 
         * */
        File f=new File("fi.txt");
        if(f.exists())
        {
            System.out.println("fi.txt文件存在");

            try {
                //创建文件输入流
                FileInputStream fis=new FileInputStream(f);
                //获取文件输入流后,将输入流包装成InputStreamRead,是字节流通向字符流的桥梁:它使用指定的 charset 读取字节并将其解码为字符
                InputStreamReader isr=new InputStreamReader(fis);//字节向字符转换的时候需要编码utf-8
                //使用BufferedRead,从字符输入流中读取文本,缓冲各个字符,从而实现字符、数组和行的高效读取。
                BufferedReader br=new BufferedReader(isr);

                String line;
                while((line=br.readLine())!=null)
                {
                    System.out.println(line);
                }
                //当读取内容为空之后需要关闭当前的输入流(先打开的后关闭,后打开的先关闭)
                br.close();
                isr.close();
                fis.close();

            } catch (FileNotFoundException e) {
                e.printStackTrace();
            } catch (UnsupportedEncodingException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }



        /*
         * 
         * 文件的写入
         * 
         * */
        try {
            File f2=new File("newfi.txt");
            //文件输出流是用于将数据写入 File 或 FileDescriptor 的输出流。如果文件不存在,FileOutputStream会创建出来
            FileOutputStream fos=new FileOutputStream(f2);
            //OutputStreamWriter 是字符流通向字节流的桥梁
            OutputStreamWriter osw=new OutputStreamWriter(fos);
            //将文本写入字符输出流,缓冲各个字符,从而提供单个字符、数组和字符串的高效写入。
            BufferedWriter bw=new BufferedWriter(osw);

            bw.write("hello");

            bw.close();
            osw.close();
            fos.close();

            System.out.println("写入完成");
        } catch (FileNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

    }

}

这里写图片描述

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值