目录

1.泛型
2.File对象
3.IO流
4. 字节输入和输出流
5. 缓存流
6. 对象流

1泛型

1.1什么是泛型

1. 泛型就是限制我们得数据类型。2.为什么使用泛型?
我们原来在定义集合时,是如下得定义方式:List list=new ArrayList();//该集合没有使用泛型list.add("java01");list.add("java02");String str= (String) list.get(0);//获取元素 需要进行强制类型转换System.out.println(str);
获取元素时,不方便对元素进行相应得其他操作。     

1.2如何使用泛型

public static void main(String[] args) {List<String> list=new ArrayList<>();//这里就限制了集合中每个元素得类型。list.add("java01");list.add("hello"); //因为集合中只能添加String类型list.add("world"); //因为集合中只能添加String类型String s = list.get(0); //在获取元素时 默认就是相应得数据类型 而无需在进行转换//<K,V>:K:表示键得泛型  V:表示值得泛型HashMap<String,Integer> map=new HashMap<>();map.put("name",15);map.put("age",25);Set<String> keys = map.keySet();}

1.3 我们自己能否定义泛型类

肯定可以!
public  class 类名<标识,标识....> {标识  变量名;public 标识 方法名(){}public void 方法名(标识 参数名){}.........}

定义坐标类:

public class Test4 {public static void main(String[] args) {//在创建泛型类对象时没有指定相应得泛型类型。则默认为Object类型Point p1=new Point();p1.setX(15);p1.setX("北纬50度");//这里得泛型必须都是对象类型Point<Integer> p2=new Point<Integer>() ;p2.setX(25);p2.setY(65);Integer x = p2.getX();Integer y = p2.getY();p2.show();Point<String> p3=new Point<>();}
}
class Point<T>{private T x;private T y;public void show(){System.out.println("x坐标为:"+x+";y坐标为:"+y);}public T getX() {return x;}public void setX(T x) {this.x = x;}public T getY() {return y;}public void setY(T y) {this.y = y;}
}

2. File对象

——————————————————————————————————————————

2.1 file得介绍

File 类 就是当前系统中 文件或者文件夹的抽象表示
    
通俗的讲  就是 使用File对象 来操作我们电脑系统中的文件或者文件夹

学习File类 其实就是学习 如果通过file对象 对系统中的文件/文件夹进行增删改查

2.2 创建File对象

 public static void main(String[] args) {//创建一个File对象 并指定文件得路径  \转移字符串File file01 = new File("D:\\AAA\\aaa.txt");/*\\目录层级  在window系统下层级分割符为\  但是在linux和mac系统上分割符为 /我们得java代码是一种跨平台得语言。 我们得开发在window  但是我们项目得部署在linux.我们使我们得代码能在任意系统下来用。 我们有两种解决办法(1)第一种 因为window 兼容 / 和 \*/File file02 = new File("D:/AAA/bbb.txt");// 第二种 File.separator根据当前代码所在得系统自动获取相应得分割符 System.out.println(File.separator); // \因为我们当前在window下File file03 = new File("D:"+File.separator+"AAA"+File.separator+"ccc.txt");}

2.3 增加操作

public static void main(String[] args) throws IOException, InterruptedException {//创建File对象File file1=new File("E:/AAA/aaa.txt");file1.createNewFile();//创建相应的文件File file2=new File("E://AAA/bbb");file2.mkdir();//创建目录 make directory 单层目录File file3=new File("E:/AAA/ccc/fff");file3.mkdirs();//创建多层目录File file4=new File("E:/AAA/eee");file4.createNewFile();}

2.4 删除

  public static void main(String[] args) throws InterruptedException {File file01 = new File("D:/AAA/a.txt");file01.delete();//删除文件File file02 = new File("D:/AAA/eee");file02.deleteOnExit(); // 当程序退出后 删除//        Thread.sleep(5000); //休眠10秒File file03 = new File("D://AAA/bbb");file03.delete();//删除空目录}

2.5 修改

 public static void main(String[] args) throws IOException {File file1=new File("E:/AAA/t.txt");file1.createNewFile();//file1.setReadable(false);//设置文件的权限为不能读//file1.setWritable(false);//设置文件不能写//file1.setReadOnly();//设置只读的权限file1.renameTo(new File("E:/AAA/d.txt"));//重命名}

2.6 查询

 public static void main(String[] args) {File file=new File("E:/AAA/ccc/fff/a.txt");String name = file.getName(); //得到文件得名称System.out.println("name======"+name);String parent = file.getParent(); //得到父级路径得名称System.out.println("parent===="+parent);String path = file.getPath(); //得到文件得路径名称System.out.println("path======"+path);boolean f1 = file.isFile(); //判断该文件对象是否为文件类型System.out.println("f1========="+f1);boolean f2 = file.isDirectory(); //判断该文件对象是否为目录类型System.out.println("f2========="+f2);File file2 = new File("E:/AAA");String[] list = file2.list(); //列出AAA目录下所有子文件得名称System.out.println(Arrays.toString(list));File[] files = file2.listFiles(); //列出AAA目录下所有文件对象for(File f:files){System.out.println(f.toString());}}

经典题目: 用的方法的递归调用。

显示指定目录下的所有文件。D:/AAA下所有的文件.
public static void main(String[] args) {showAllFiles("D:/AAA");}public static void showAllFiles(String path){//使用传入的路径构建文件对象File file=new File(path);//判断文件是否存在 或者文件是否为目录.if(!file.exists() || !file.isDirectory()){return;}//列出该目录下所有的文件对象。File[] files = file.listFiles();//遍历数组for(File f:files){if(f.isDirectory()){System.out.println(f.getPath()+"   <Dir>");showAllFiles(f.getPath());//继续调用本方法}else{System.out.println(f.getPath()+" ");}}}

3. IO流

1. IO 表示有两个单词的缩写。
  I: Input 输入   O: Output 输出

2. IO的作用:就是对文件中的内容进行操作。
  输入: 读操作(读取文件的内容)   输出: 写操作(往文件中写内容)
 
3. IO流的分类:

(1)根据流的方向:
    ---输入流: 程序可以从中读取数据的流。
    ---输出流: 程序能向其中写入数据的流。
    
 (2)根据流的单位:
    ---字节流: 以字节为单位传输数据的流
    ---字符流: 以字符为单位传输数据的流
 
 (3)根据功能
    ---节点流: 直接和文件进行交互
    ---处理流: 不是直接作用在文件上。
    
四个基本的流: 其他的流都是在这四个流的基础上进行扩展的
        字节输入流
        字节输出流
    
        字符输入流
        字符输出流

3.1 Writer字符输出流

它是所有字符输出流的跟类。---FileWriter类

public static void main(String[] args) throws Exception{Writer writer = new FileWriter("E:/AAA/g.txt");String str="hello 今天要开演唱会";writer.write(str);writer.flush(); //刷新流writer.close(); //关闭流资源}

上面每次往文件中写内容时 就会把原来的内容覆盖了。 如何追加内容

public static void main(String[] args) throws Exception{//字符输出流 ---指定对哪个文件(路径)进行写操作//true:表示允许追加内容到文件中Writer  writer=new FileWriter("E:/AAA/g.txt",true);String str="Hello 刘德华 今天请来了";writer.write(str);writer.flush(); //刷新流writer.close(); //关闭流资源}

3.2 Reader字符输入流

它是所有字符输入流的根类  它的实现类有很多,我们使用FileReader实现类

public static void main(String[] args) throws Exception{//创建字符输入流对象 作用:就是读取g.txt里的内容Reader reader =new FileReader("E:/AAA/g.txt");int count=0;//表示读取字符的个数char[] cs=new char[10];//每次读取到元素存入该数组中while( (count=reader.read(cs)) !=-1 ){String str=new String(cs,0,count);System.out.print(str);}//但是这种效率会很慢 因为每次只读取一个字符。// 那么我们可以一次读取多个字符 并存入一个字符数组中/*char[] cs =new char[2];int x=reader.read(cs);System.out.println(x);System.out.println(cs);String s=new String(cs,0,x);//把字符数组转换为字符串。System.out.println(s);x=reader.read(cs);System.out.println(x);System.out.println(cs);x=reader.read(cs);System.out.println(x);System.out.println(cs);*/}

完成文件内容的复制。

要求: D:/AAA/d.txt 复制到 C:/AAA/d.txt.

 /*完成文件内容的复制功能*/@Testpublic void test02() throws Exception{//1.创建一个字符输入流FileReader fr=new FileReader("D:/AAA/d.txt");//2.创建一个字符输出流FileWriter fw=new FileWriter("C:/AAA/f.txt");int c=0;//读取到字符的个数char[] cs=new char[10];//每次读取的内容放入该数组中while( (c=fr.read(cs)) !=-1 ){fw.write(cs,0,c);fw.flush(); //刷新}fw.close();fr.close();}

4. 字节流

——————————————————————————————————————————

4.1 字节输出流--OutputStream

它可以对任意文件进行操作,对文件进行输出操作。以字节为单位。 它是所有字节输出流的父类,FileOutputStream

 //测试字节输出流@Testpublic void testOutStream() throws Exception{OutputStream os=new FileOutputStream("D:/AAA/g.txt");String str="abcd";//把字符串转换为字节数组.byte[]bytes=str.getBytes();os.write(bytes);os.flush();os.close();}

4.2 字节输入流---InputStream

它可以对任意文件进行读操作 ,以字节为单位,它是所有字节输入流的父类,子类有FileInputStream

 //一次一次的读取@Testpublic void testInputStream() throws Exception{InputStream  is=new FileInputStream("D:/AAA/g.txt");byte [] bytes=new byte[3];int c=is.read(bytes); //一次读取三个字节 并把读取的内容放入字节数组中  返回读取到字节的个数System.out.println(bytes+"=============>个数:"+c);c=is.read(bytes); //一次读取三个字节 并把读取的内容放入字节数组中  返回读取到字节的个数System.out.println(bytes+"=============>个数:"+c);c=is.read(bytes); //一次读取三个字节 并把读取的内容放入字节数组中  返回读取到字节的个数System.out.println(bytes+"=============>个数:"+c);}//如果文件中内容非常大  使用循环来读取@Testpublic void testInputStream2() throws  Exception{InputStream  is=new FileInputStream("D:/AAA/g.txt");byte [] bytes=new byte[300];int c=0; //读取到的个数while( (c=is.read(bytes))!=-1 ){//把byte数组转换为字符串String str=new String(bytes,0,c);System.out.println(str);}is.close();}

使用字节输入和输出流完成文件的复制功能:

   @Testpublic void testinputStream()throws Exception{//1.创建字节输入流 视频InputStream is=new FileInputStream("E:/AAA/a3.jpg");//2.字节输出流OutputStream fos=new FileOutputStream("D:/AAA/a3.jpg");byte [] bytes=new byte[10];int c=0;while ((c= is.read(bytes))!=-1){fos.write(bytes,0,c);}is.close();fos.close();}

5. 缓存流

缓存流是在基础流[InputStream OutputStream Reader Writer]之上 添加了一个缓存池功能.

BufferInutStream  BufferOutputStream BufferReader  BufferWriter 提高IO的效率,降低IO的次数。

//缓存流@Testpublic void TestBuffer() throws Exception{OutputStream out=new FileOutputStream("D:/AAA/g.txt");BufferedOutputStream  bos=new BufferedOutputStream(out);//缓存流要作用再基础流上String str="abcdefhijglmn";byte[] bytes = str.getBytes();bos.write(bytes);  //因为你写的内容 暂时放入缓存池中  并没有直接放入文件中。 所以文件中没有你的内容。//bos.flush();//刷新缓存池---把池子中的内容输入到文件上bos.close(); //关闭----先刷新缓冲池 再关闭流资源}

6. 对象流--对java对象进行IO操作

为什么需要对象流
  我们现在操作IO流的时候 都是将字符串读写操作 可不可以将java对象在文件中进行读写呢? 可以的 Student st=new Student();对象
  将java对象进行读写操作 意义在于持久化信息  例如: 游戏存档。
   //  因为运行的时候 所有的数据都是在运行内存中的   持久化 将运行内存的数据 保存到硬盘上    存档(写)  读档(读)

 @Test //存档:----序列化:public void testObjectStream() throws Exception{OutputStream out=new FileOutputStream("D:/AAA/a.txt");//对象输出流ObjectOutputStream oos=new ObjectOutputStream(out);//使用对象输出流调用输出方法 输出的类对象 该类必须实现Serializable 序列化接口Role r=new Role("吕布","7级",1,"弑父");oos.writeObject(r);oos.close();}//测试 读档: ----反序列化:@Testpublic void testObjectStream2()throws Exception{InputStream input=new FileInputStream("D:/AAA/a.txt");ObjectInputStream ois=new ObjectInputStream(input);Object o = ois.readObject();System.out.println(o);ois.close();}

1. 序列化: 把内存中的java对象存储到磁盘[网盘]的过程。
         ---java对象所属的类必须实现序列化接口.implements Serializable
2. 反序列化: 把磁盘中的内容读取到java对象内存中的过程。

总结:

1.  通过字符流完成文件的复制---->它只能复制文本文件
2.  字节流:---字节输入流和字节输出流。
3.  字节流 我们也可以完成文件的复制功能---它可以复制任意类型的文件.
4.  缓存流--->它基本流的基础上 添加了一个缓存池
5.  对象流: ObjectInputStream  ObjectOutputStream
     序列化:
     反序列化:

Java——泛型和Io流相关推荐

  1. java中io流实现哪个接口_第55节:Java当中的IO流-时间api(下)-上

    标题图 Java当中的IO流(下)-上日期和时间日期类:java.util.Date 系统时间:long time = System.currentTimeMillis();public class  ...

  2. Java中的IO流(六)

    上一篇<Java中的IO流(五)>把流中的打印流PrintStream,PrintWriter,序列流SequenceInputStream以及结合之前所记录的知识点完成了文件的切割与文件 ...

  3. java中的IO流(超全)(超详解)结合实例轻松掌握

    java进阶之IO流 IO流的概念(大纲): 1.InputStream和OutputStream的继承关系图 2.Reader和Writer的继承关系图 3.文件专属流(加※为重点掌握) ※File ...

  4. 【Java基础】· IO流习题详解

    写在前面 Hello大家好, 我是[麟-小白],一位软件工程专业的学生,喜好计算机知识.希望大家能够一起学习进步呀!本人是一名在读大学生,专业水平有限,如发现错误或不足之处,请多多指正!谢谢大家!!! ...

  5. Java当中的IO流(中)

    Java当中的IO流(中) 删除目录 import java.io.File;public class Demo{public static void main(String[] args){// 目 ...

  6. Java当中的IO流-时间api(下)-上

    Java当中的IO流(下)-上 日期和时间 日期类:java.util.Date 系统时间: long time = System.currentTimeMillis(); public class ...

  7. Java基础学习—— IO流

    Java基础学习-- IO流 1 文件 1.1 文件的创建 1.2 文件常用的方法 2 IO流 2.1 FileInputStream 2.2 FileOutputStream 2.3 文件的拷贝 2 ...

  8. java io流分为,Java中的IO流按照传输数据不同,可分为和

    Java中的IO流按照传输数据不同,可分为和 答:字节流 字符流 克里斯蒂安 · 麦茨指出:想象的能指就是电影的能指,作为象征的科学,在第三视野范围内的解读,它是( ) 答:建立在共同的永久的背景之中 ...

  9. 重新java系列之IO流

    重新java系列之IO流 内容介绍 学习目标 字符输入流 字符输入流[Reader] FileReader类 构造方法 读取字符数据 使用演示: 字符输出流 字符输出流[Writer] FileWri ...

最新文章

  1. linux svn更换数据仓库,Linux环境下SVN数据仓库迁移
  2. EIGRP的等价负载均衡
  3. WinRT知识积累1之读xml数据
  4. C# WPF MVVM项目实战(进阶②)
  5. forge开发_使用Forge,WildFly Swarm和Arquillian开发微服务
  6. C#GRPC 服务端与客户端通信,故障排除记录
  7. VMware虚拟机安装Linux系统(详解版)
  8. 设计模式学习笔记——策略(Strategy)模式
  9. 业务层应该返回DataSet/DataTable,还是对象/对象集合?
  10. 【JavaEE】ch09-反射
  11. 微信小程序检查版本更新并重启
  12. 汉王考勤管理软件mysql数据库配置_汉王考勤管理软件使用说明书介绍.pdf
  13. 计算机信息管理调查报告模板,精选市场调查报告模板锦集九篇
  14. matlab矩阵四分位数,中位数,四分位数
  15. [学习笔记]UnityShader入门精要_第12章_屏幕后处理效果
  16. 基于C#在WPF中使用斑马打印机进行打印
  17. 计算机90学时培训小结,90学时培训总结
  18. nav 计算机网络_计算机网络课件谢希仁
  19. 小程序底部导航iphoneX判断
  20. (个人笔记)Django学习笔记整理

热门文章

  1. 开源物联网平台推荐介绍
  2. oracle----存储过程
  3. STC单片机 VS/HX1838红外接收和发送实验
  4. 各省排污费(环保税)面板数据(2004-2018年)
  5. 全新修复版/官方代付系统/支付宝微信代付/企业付款/提现秒到
  6. K-means聚类分析-机器学习
  7. FastDFS上传下载文件
  8. 二维动画设计软件应用——Flash CS6全书电子教案完整版电子教案
  9. 这才叫大数据!腾讯首次公布微信数据(完整版)
  10. Multisim14访问主数据库失败的解决方法