1.Map集合

Interface Map<K,V>   key->键,value->值

Map集合是一个双边队列,存的是键值对的数据。

Mapa接口下面已经封装好了实现类

①HashMap

②TreeMap

Map接口下面的方法

增:

V put(K key,V value)  将指定的值与该映射中指定的键相关联

void putAll(Map<? extends K,? extends V>  m)  将指定地图的所有映射复制到此映射

删:

V remove(K key)  通过键删除指定的值,返回值是被删除的值

改:

V put(K key,V value)

查:

int size()查看集合中元素的个数

boolean isEmpty()判断集合是否为空

boolean containsKey(Object key)判断集合中是否包含这个键

boolean containsValue(Object value)判断集合中是否包含这个值

重要的方法:

V get(K key)通过键获取值

Set<k> keySet()获取所有的键存到set集合中

Collection<v> values()获取所有集合中的值

Set<Map.Entry<K,V>>  entrySet() 将键值对的map实体存到set集合中

import java.util.Collection;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;public class Demo1 {public static void main(String[] args) {Map<String, String> map = new HashMap<>();map.put("001", "老邢");//ctrl + dmap.put("002", "骚磊");map.put("003", "狗蛋");System.out.println(map);//{001=老邢, 002=骚磊, 003=狗蛋}//001=老邢  就叫键值对Map<String, String> map1 = new HashMap<>();map1.put("004", "恩东");//ctrl + dmap1.put("005", "老万");map1.put("006", "阳仔");System.out.println(map1);map.putAll(map1);System.out.println(map);//{001=老邢, 002=骚磊, 003=狗蛋, 004=恩东, 005=老万, 006=阳仔}
//        Map<Integer, String> map2 = new HashMap<>();
//        map2.put(4, "恩东");//ctrl + d
//        map2.put(5, "老万");
//        map.putAll(map2);System.out.println(map.remove("003"));System.out.println(map);//{001=老邢, 002=骚磊, 004=恩东, 005=老万, 006=阳仔}System.out.println(map.put("005", "老实巴交的老万"));System.out.println(map);//{001=老邢, 002=骚磊, 004=恩东, 005=老实巴交的老万, 006=阳仔}System.out.println(map.size());//5System.out.println(map.isEmpty());//falseSystem.out.println(map.containsKey("003"));//falseSystem.out.println(map.containsKey("004"));//trueSystem.out.println(map.containsValue("老邢"));//trueSystem.out.println(map.get("001"));//老邢Set<String> strings = map.keySet();//返回值是nset 键是不可重复的 所以将键存到set集合中System.out.println(strings);Collection<String> values = map.values();System.out.println(values);Set<Map.Entry<String, String>> entries = map.entrySet();System.out.println(entries);//使用增强for循环  iter快捷键for (Map.Entry<String, String> entry : entries) {System.out.println(entry);//001=老邢 键值对对象System.out.println(entry.getKey());//获取的键System.out.println(entry.getValue());//获取值System.out.println("=====");}}
}

Map集合中的value值存放自定义的对象

import java.util.HashMap;
import java.util.Map;class Person{private String name;private int age;public Person(String name, int age) {this.name = name;this.age = age;}public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}@Overridepublic String toString() {return "Person{" +"name='" + name + '\'' +", age=" + age +'}';}
}//Map集合练习
public class Demo9 {public static void main(String[] args) {Map<Integer,Person> map=new HashMap<>();map.put(1,new Person("小明",21));map.put(2,new Person("松木",23));map.put(3,new Person("小华",25));System.out.println(map);System.out.println(map.get(2).getName());}
}

2.File类

File类是Java内置的一个类,专门处理电脑磁盘上面的文件和文件夹的一个类

文件路径问题:

①相对路径:需要有一个参照物

./  表示的是当前的工作目录

../表示的是上一级目录

../../表示的是上两级目录

../../../表示的是上三级目录

......

以此类推

②绝对路径:从磁盘的根目录一直到文件的所在位置

2.1File构造方法

File(String pathname)通过将给定的路径名字符串转换为抽象路径名来创建新的 File实例。

File(String parent, String child)从父抽象路径名和子路径名字符串创建新的 File实例。

static String separator()与系统相关的默认名称 - 分隔符字符

import java.io.File;public class Demo1 {public static void main(String[] args) {//将文件和文件夹路径抽象成了一个对象File file = new File("c:/aaa/3.txt");System.out.println(file);//c:\aaa\3.txtFile file1 = new File("c:/aaa", "3.txt");System.out.println(file1);System.out.println(File.separator);//\File file2 = new File("c:\\aaa\\3.txt");//得到一个结论: z在windows系统下面 /  和\都是可以的//但是在linux系统下面  只能/   才可以//  separator//与系统相关的默认名称 - 分隔符字符File file3 = new File("c:" + File.separator + "aaa" + File.separator + "3.txt");System.out.println(file3);}
}

2.2File类下面的方法

boolean createNewFile(); 新建一个文件

①如果文件路径不存在, 系统找不到指定的路径

②如果文件已经存在 返回一个false

③磁盘坏了

boolean mkdir(); 创建单级的目录

boolean mkdirs();创建多级的目录

import java.io.File;
import java.io.IOException;public class Demo2 {public static void main(String[] args) throws IOException {File file = new File("c:/aaa/sb.txt");System.out.println(file.createNewFile());File file1 = new File("c:/aaa/bbb");System.out.println(file1.mkdir());//创建单级目录File file2 = new File("c:/aaa/ccc/ddd");System.out.println(file2.mkdirs());}
}

boolean delete()删除文件或文件夹

import java.io.File;
import java.io.IOException;public class Demo2 {public static void main(String[] args) throws IOException {File file = new File("c:/aaa/sb.txt");System.out.println(file.createNewFile());File file1 = new File("c:/aaa/bbb");System.out.println(file1.mkdir());//创建单级目录File file2 = new File("c:/aaa/ccc/ddd");System.out.println(file2.mkdirs());System.out.println(file1.delete());System.out.println(file.delete());File file3 = new File("c:/aaa/ccc");System.out.println(file3.delete());//因为ccc下面还有文件夹或者文件//delete只能删除空的文件夹或者文件}
}

File类下面判断的方法

boolean isFile();是否是文件

boolean isDirectory(); 是否是文件夹

boolean isHidden(); 是否是隐藏文件

boolean isAbsolute(); 是否是绝对路径

boolean exists(); 文件或者文件夹是否存在

import java.io.File;public class Demo3 {public static void main(String[] args) {File file = new File("c:/aaa/1.txt");System.out.println(file.isFile());File file1 = new File("c:/aaa/ccc");System.out.println(file1.isFile());//falseSystem.out.println(file.isDirectory());//falseSystem.out.println(file1.isDirectory());//trueSystem.out.println(file.isHidden());//trueFile file2 = new File("../");System.out.println(file2);System.out.println(file2.isAbsolute());//falseSystem.out.println(file.isAbsolute());//trueSystem.out.println(file.exists());//判断一个文件是否文件System.out.println(file1.exists());}
}

获取方法 返回值的是字符串的方法

String getName();获取文件或者文件夹的名字的

STring getParent();获取上一级目录

String getPath();获取file对象的绝对路径

import java.io.File;public class Demo4 {public static void main(String[] args) {File file = new File("c:/aaa/1.txt");System.out.println(file.getName());//1.txtSystem.out.println(file.getParent());//c:\aaaSystem.out.println(file.getPath());//c:\aaa\1.txt}
}

方法是long类型数据

long length();获取文件占用磁盘的字节数

long lastModified(); 获取当前文件修改的时间 时间戳

import java.io.File;public class Demo5 {public static void main(String[] args) {File file = new File("c:/aaa/1.txt");System.out.println(file.length());//获取文件的大小的 是一个字节数System.out.println(file.lastModified());//1679904357979//时间戳是指格林威治时间1970年01月01日00时00分00秒(北京时间1970年01月01日08时00分00秒)起至现在的总秒数。}
}

获取当前文件夹下面的所有的文件

File[] listFiles();

String[] list();

import java.io.File;public class Demo6 {public static void main(String[] args) {File file = new File("c:/");File[] files = file.listFiles();for (File file1 : files) {System.out.println(file1);//获取文件对象}System.out.println("=======");String[] list = file.list();for (String s : list) {System.out.println(s);//获取名字而已}}
}

3.IO流

输入流:

input:从磁盘的某个文件中读取数据到内存中(Java代码中)

①字节输入流

②字符输入流

输出流:

output:从内存(Java代码)中写入到磁盘的某个文件中

①字节输出流

②字符输出流

参照物:内存

3.1字节输入流

FileInputStream  将磁盘中的文件的内容读取到Java代码中

import java.io.*;public class Demo2 {public static void main(String[] args) throws IOException {//1.创建一个file对象的  文件抽象File file = new File("c:/aaa/1.txt");//2.创建字节输入流的核心的类FileInputStream fis = new FileInputStream(file);//3.加缓冲功能BufferedInputStream bis = new BufferedInputStream(fis);//4.创建一个数组  缓冲数组byte[] buf = new byte[4 * 1024];//4096字节/*** 5.读取方法* public int read(byte[] b)   将文件中的数据 读取到缓冲数组中*          throws IOException* 从该输入流读取最多b.length字节的数据到字节数组。 此方法将阻塞,直到某些输入可用。* 重写:* read在 InputStream类* 参数* b - 读取数据的缓冲区。* 结果* 读入缓冲区的总字节数,如果没有更多的数据,因为文件的结尾已经到达, -1 。*/int length;while ((length = bis.read(buf)) != -1) {System.out.println(new String(buf, 0, length));}//6.关闭bis.close();fis.close();}
}

3.2字节输出流

FileOutputStream 将Java代码中的一个字符串写入到磁盘中


import java.io.*;public class Demo1 {public static void main(String[] args) throws IOException {//1.创建文件对象File file = new File("c:/aaa/2.txt");//2.创建核心的字节输出流对象FileOutputStreamFileOutputStream fos = new FileOutputStream(file);//3.加缓冲的效果  BufferedOutputStreamBufferedOutputStream bos = new BufferedOutputStream(fos);//4.声明一个字符串String str = "abcdefgh";/*** void  write(byte[] b)  将字节数组中的数据写入到* 将 b.length个字节从指定的字节数组写入此文件输出流。*/bos.write(str.getBytes());/*** void  write(byte[] b, int off, int len)* 将 len字节从位于偏移量 off的指定字节数组写入此文件输出流。*///bos.write(str.getBytes(), 0, 3);//bos.write(1);bos.close();fos.close();}
}

针对于上面的内容写一个案例:

c:/bbb下面有一个视频文件 复制到c:/aaa下面

思路: 先从磁盘读取到内存缓冲数组(输入流)中然后再写入磁盘中(输出)

import java.io.*;public class Demo1 {public static void main(String[] args) throws IOException {copyVideo1();}public static void copyVideo () throws IOException {//创建缓冲输入流对象BufferedInputStream bis = new BufferedInputStream(new FileInputStream(new File("c:/bbb/12转义字符.mp4")));//创建缓冲输出流对象BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(new File("c:/aaa/sb.mp4")));//准备一个缓冲数组byte[] buf = new byte[4096];int length;while ((length = bis.read(buf)) != -1) {//length = bis.read(buf)  从磁盘读取数据到缓冲数组中bos.write(buf, 0, length);//从缓冲数组中写入到磁盘}bos.close();bis.close();}//不带缓冲的public static void copyVideo1 () throws IOException {FileInputStream fis = new FileInputStream(new File("c:/bbb/12转义字符.mp4"));FileOutputStream fos = new FileOutputStream(new File("c:/aaa/2b.mp4"));int length;while ((length = fis.read()) != -1) {fos.write(length);}fos.close();fis.close();}}

3.3字符输入流【非重点】

FileReader  将磁盘中的文件的内容读取到Java代码中

阅读字符文件的便利类

FileReader是用于读取字符流。 要读取原始字节流(图片 音频 视频),请考虑使用FileInputStream

FileReader是从字节流到字符流的桥:它读取字节,并使用指定的charset将其解码为字符 。

import java.io.*;public class Demo1 {public static void main(String[] args) throws IOException {//1.创建file对象File file  = new File("c:/aaa/1.txt");//2.创建字符输入流的核心的对象FileReader fr = new FileReader(file);//3.加缓冲效果BufferedReader br = new BufferedReader(fr);//4.准备缓冲的数组char[] cbuf = new char[2];//从磁盘读取数据到缓冲数组中int length;while ((length = br.read(cbuf)) != -1) {System.out.println(new String(cbuf, 0, length));}br.close();fr.close();}
}

3.4字符输出流【非重点】

FileWriter  场景: Java中有一个字符串然后写入到磁盘的一个文件中

import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;public class Demo1 {public static void main(String[] args) throws IOException {//File file = new File();FileWriter fw = new FileWriter("c:/aaa/2.txt", true);BufferedWriter bw = new BufferedWriter(fw);String str = "bhxsanxn";//write//bw.write(str);//void    write(String str)//写一个字符串
//        void  write(String str, int off, int len)
//        写一个字符串的一部分。//bw.write(str, 3, 2);//void   write(int c)//写一个字符//bw.write(97);
//        void  write(char[] cbuf)
//        写入一个字符数组。bw.write(str.toCharArray());//abstract void  write(char[] cbuf, int off, int len)//写入字符数组的一部分。//bw.write(str.toCharArray(), 3, 1);
//        bw.write("狗蛋");
//        bw.newLine();
//        bw.write("毛蛋");
//        bw.newLine();
//        bw.write("老邢");bw.close();fw.close();}
}

复制一个文本文档到另外一个盘符下面

import java.io.*;public class Demo1 {public static void main(String[] args) throws IOException {//字符流将一个文本赋值2到另外一个文件夹下面//BufferedReader  专门将文本内容读取到内存中BufferedReader br = new BufferedReader(new FileReader("c:/bbb/《雪中悍刀行》.txt"));BufferedWriter bw = new BufferedWriter(new FileWriter("c:/aaa/88.txt"));char[] cbuf= new char[1024];int length;while ((length = br.read(cbuf)) != -1) {bw.write(cbuf, 0, length);}bw.close();br.close();}
}

3.5序列化和反序列化

新建类然后创建对象,然后对对象的属性赋值。对象真实存在了,然后可以通过流来将对象存到本地磁盘上面,这就叫序列化。 本次磁盘上面存的有对象的数据,咱们可以再通过流读取到Java代码中变成对象,这叫反序列化 持久性操作

从内存到磁盘 序列化 输出流 ObjectOutputStream write

import java.io.*;
import java.util.ArrayList;class Employee implements Serializable {String name;int age;transient int ID;//短暂的  此属性不可序列化String adress;//地址public void eat() {System.out.println("今天中午没有吃饱");}
}public class Demo1 {public static void main(String[] args) throws IOException {Employee employee = new Employee();employee.name = "gousheng";employee.adress = "航海中路";employee.age = 18;employee.ID = 8989;//将Java代码中的对象存到磁盘中FileOutputStream fos = new FileOutputStream("c:/aaa/emp.ser");ObjectOutputStream oos = new ObjectOutputStream(fos);oos.writeObject(employee);oos.close();fos.close();}
}

反序列化 从磁盘到 内存中 ObjectInputStream

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.ObjectInputStream;public class Demo2 {public static void main(String[] args) throws Exception {//反序列化FileInputStream fis = new FileInputStream("c:/aaa/emp.ser");ObjectInputStream ois = new ObjectInputStream(fis);Employee emp = (Employee)ois.readObject();System.out.println(emp.name);System.out.println(emp.age);System.out.println(emp.adress);System.out.println(emp.ID);//0}
}

注意:一个类对象想要序列化成功,必须满足两个条件:

①该类必须实现Serializable接口

②该类的所有属性必须是可序列化的。如果有一个属性不是可序列化的,则该属性必须注明是短暂的transient

Map集合,File类,IO流相关推荐

  1. Map集合 File类 递归 序列化 常用类 进程线程 死锁

    一.Map集合 将键映射到值得对象,键得值不能重复,一个键可以对应最少一个值. Map接口下的封装好得实现类 –|HashMap –|TreeMap 1.Map接口下的方法 增://将指定得值与该映射 ...

  2. 【JAVA黑马程序员笔记】三P233-P312(List、Set、比较器、泛型、Map、File、IO流...)

    P233 数据结构 栈:数据进入栈模型叫做压栈,数据离开栈模型为弹栈.栈是后进先出的模型. 队列:数据从后端进入队列模型的过程叫做入队列,离开队列的过程叫出队列.队列是先进先出的模型. 数组:查询数组 ...

  3. java(File、IO流)

    IO流 一.IO流和File类 二 .File类 绝对路径和相对路径 file的成员方法 file的创建方法 file的删除方法 file的判断和获取功能 高级获取方法listFiles() file ...

  4. Stream流、FiLe和IO流、IO流(字节流-拷贝文件_和_字符流-读取文本中的数据写入文本文件中)9-10-11

    package com.streamdemo; import java.util.ArrayList; import java.util.List; /*** 体验Stream流** 创建一个集合,存 ...

  5. Java面试知识点:File、IO流

    问题:Java面试知识点:File.IO流 答案: 1.File listFiles方法注意事项: • 当调用者不存在时,返回null • 当调用者是一个文件时,返回null • 当调用者是一个空文件 ...

  6. java基础实现水果超市系统(数组+集合+对象持久化(io流存储到txt文件))

    java基础实现水果超市系统(数组+集合+对象持久化(io流存储到txt文件)) Fruit类 package com.zr.fruitSupermarket;/*** 水果* @author ZR* ...

  7. 11. Java File和IO流(下)

    Java File和IO流 5. 缓冲流 5.1 概述 5.2 字节缓冲流 5.3 字符缓冲流 6. 转换流 6.1 问题引出 - 不同编码读取乱码问题 6.2 字符输入转换流 6.3 字符输出转换流 ...

  8. Java:File和IO流

    18 File(18-19) IO:对硬盘的文件进行读写 File:对(文件/文件夹)进行创建,删除等,表示要读写的(文件/文件夹)在哪 18.1 File构造方法 方法名 说明 File​(Stri ...

  9. Day22 Java IO流 File、IO流的字节输出流

    File 概述: 想要实现IO流操作,就必须要知道硬盘上文件的表现形式 Java提供了一个类让我们操作硬盘上的文件:File.File也就是文件的表现形式 File:文件和目录(文件夹)路径名的抽象表 ...

  10. 零基础学Python(第十九章 File操作·IO流补充章节)

    本套学习内容共计[22]个章节,每个章节都会有对应的从0-1的学习过程详细讲解,希望可以给更多的人提供帮助. 开发环境:[Win10] 开发工具:[Visual Studio 2019] 本章内容为: ...

最新文章

  1. Apriltag可用图片:TAG16H5
  2. 基于php的应用程序,基于PHP的Web应用程序和群发邮件
  3. 关闭窗体后,进程仍然在运行的问题重现与解决
  4. C链表(顺序表、静态链表区别)
  5. 如何查看google chrome 插件源码
  6. np中meshgrid生成二维矩阵matplotlib中imshow生成图形
  7. 论文笔记-LSHTC: A Benchmark for Large-Scale Text Classification-2015
  8. 安卓psp模拟器联机教程_让PSP带你回童年FC模拟器联机教程.doc
  9. wps中有公式如何调整间距
  10. 史上最美八大隶书,你都临过吗?
  11. 如何塑造亲切有趣的微博形象?
  12. curl 访问 IPv6 url
  13. eclipse怎么配置oracle数据库,Eclipse连接Oracle数据库介绍
  14. Spring Cloud Alibaba阿里面试题
  15. proj4,七参数与坐标转换原理
  16. 小米8手机相册中的图片怎么识别文字?
  17. Linux无法终止进程,如何在Linux中终止进程
  18. 【计算机网络】第一章:计算机网络概述
  19. python期末试题汇总
  20. 计算机辅助训练对吞咽障碍,吞咽障碍的六大家庭训练方法

热门文章

  1. 龙舞唐门,京都樱花节光雕投影表演_数字体验_新浪博客
  2. 华为青年研究员获NeurIPS最佳论文奖:4856篇投稿,仅有21%录取率
  3. IDEA 导入jar包
  4. python win10 ffmpeg_win10系统ffmpeg命令初体验
  5. 【个人知识成长】-1.2-知识树
  6. Linux OA的版本 IC610,ubuntu装ic610.doc
  7. 全球与中国车队管理咨询服务市场现状及未来发展趋势
  8. JDK各个版本的区别
  9. 刚测完Bug,就被开除了····
  10. python二维数组的创建和操作