首页 > 编程语言 >JAVA语言学习-Day5

JAVA语言学习-Day5

时间:2024-04-08 11:44:34浏览次数:21  
标签:fis JAVA 语言 f1 Day5 FileInputStream 线程 close new

集合

Java中的集合是工具类,可以存储任意数量的具有共同属性的对象

应用场景

  1. 无法预测存储数据的数据

  2. 同时存储具有一对一关系的数据

  3. 需要进行数据的增删

  4. 数据重复问题

体系结构

  • Collection:List、Queue、Set

  • Map:HashMap

List

有序且可重复,ArrayList、LinkedList

  • ArrayList底层是由数组实现的

  • 动态增长

  • 在列表尾部插入或删除数据非常有效

  • 更适合查找和更新元素

  • ArrayList中的元素可以为null

方法

List list = new ArrayList();
list.add("aaa");
list.add("bbb");
list.size();//列表中元素个数
list.get(0);//获取第一个元素
list.remove(0);//移除第一个元素
list.remove("aaa");//移除元素"aaa"

Set

元素无序并且不可以重复的集合,被称为集

HashSet

  • HashSet是Set的一个重要实现类,被称为哈希集

  • HashSet中的元素无序并且不可以重复

  • HashSet中只允许有一个null元素

  • 具有良好的存取和查找性能

Iterator(迭代器)

HashSet a = new HashSet();
a.add("a");
a.add("b");
//插入重复数据,失败但不会报错
Iterator i = a.iterator();
while(i.hasNext()) {
System.out.println(i.next());
}

Map

  • Map中的数据是以键值对(key-value)的形式存储的

  • key-value是以Entry类型的对象实例存在的

  • 可以通过key值快速的查找value

  • 一个映射不能包含重复的键

  • 每个键最多只能映射到一个值

HashMap

  • 基于哈希表的Map接口实现

  • 允许使用null值和null键

  • key值不允许重复

  • HashMap中的Entry对象是无序排列的

线程

进程是指可执行程序并存放在计算机存储器的一个指令序列,它是一个动态执行的过程

线程的创建

  1. 创建一个Thread类,或者一个Thread子类的对象

  2. 创建一个Runnable接口的类的对象

  • Java为线程提供10个优先级,默认为5,数字越大优先级越高

  • 优先级常量也可用来表示:

    • MAX_PRIORITY:线程的最高优先级10

    • MIN_PRIORITY:线程的最低优先级1

    • NORM_PRIORITY:线程的默认优先级5

class MyThread extends Thread{
   private String name;
   public MyThread(){}
   public MyThread(String name){
       super(name);
       this.name = name;
  }
   @Override
   public void run(){
       System.out.println(getName+"该线程正在执行");
  }
}
class PrintRunnable implements Runnable{
   @Override
   public void run(){
       try{
           Thread.sleep(1000);//线程中止1000毫秒
      }catch(e){e.printStackTrace();}
       System.out.println(Thread.currentThread().getName()+"正在运行");
  }
}
public static void main(String[] args){
   Thread.currentThread().getPriority();//获取当前线程优先级,主线程优先级
   MyThread mt = new MyThread();
   MyThread mt1 = new MyThread("线程一");
 
   mt.setPriority(10);//设置线程优先级
 
   mt.start();//启动线程,只能一次
   mt1.start();
   try{
       System.out.printlnt("线程mt的优先级"+mt.getPriority());
       mt.join(1000);//抢占资源,优先执行1000毫秒
  }catch(e){
       e.printStackTrace();
  }
   System.out.println("主线程执行");
   
   PrintRunnable pr = new PrintRunnable();
   Thread t1 = new Thread(pr);
   t1.start();
}

线程的状态

新建、可运行(就绪)、运行、阻塞、终止

 

synchronized关键字

synchronize关键字用在

  • 成员方法

  • 静态方法

  • 语句块

I/O流

文件可认为是相关记录或放在一起的数据的集合

常用方法

File f1 = new File("C:\\");
File f2 = new File(f1,"url");
f1.isDirectory();//判断是否是目录
f1.isFile();//判断是否是文件

f1.Absolute();//判断是否绝对路径
f1.getPath();//获取相对路径
f1.getAbsolutePath();//获取绝对路径
f1.getName();//获取文件名

if(!f1.exists){//判断目录不存在
   f1.mkdir();//创建目录
   f1.mkdirs();//创建多级目录
   try{
       f2.createNewFile();
  }catch(IOException e){
       e.printStackTrace();
  }
}
  • 绝对路径:从盘符开始的路径

  • 相对路径:从当前路径开始的路径

字节流

  1. 字节输入流

    • InputStream

      • FileInputStream:文件输入流

      • PipedInputStream:管道输入流

      • FilterInputStream:过滤器输入流

        • PushbackInputStream:回压输入流

        • BufferedInputStream:缓冲输入流

        • DataInputStream:数据输入流

      • ObjectInputStream:对象输入流

      • SequenceInputStream:顺序输入流

      • ByteArrayInputStream:字节数组输入流

      • StringBufferInputStream:缓冲字符输入流

  2. 字节输出流

    • OutputStream

      • FileOutputStream:文件输出流

      • PipedOutputStream:管道输出流

      • FilterOutputStream:过滤器输出流

        • PrintStream:格式化输出流

        • BufferedOutputStream:缓冲输出流

        • DataOutputStream:数据输出流

      • ObjectOutputStream:对象输出流

      • ByteArrayOutputStream:字节数组输出流

//FileInputStream 返回值-1表示达到文件末尾
FileInputStream fis = new FileInputStream(url);
int n = 0;//读取文件
while((n=fis.read())!=-1){
   System.out.print((char)n);
}
byte[] b = new byte[100];
fis.read(b);
System.out.print(new String(b));

fis.close();
//FileOutputStream
FileOutputStream fops = new FileOutputStream(url,true);//true追加内容,不覆盖
fops.write(50);
fops.write("a");

fops.close();

缓冲流

  • 缓冲输入流:BufferedInputStream

  • 缓冲输出流:BufferedOutputStream

FileOutputStream fos = new FileOutputStream(url);
BufferedOutputStream bos = new BufferedOutputStream(fos);
bos.write(50);
bos.write("a");
bos.flush();

FileInputStream fis = new FileInputStream(url);
BufferedInputStream bis = new BufferedInputStream(fis);
bis.read();
(char)bis.read();

fos.close();
bos.close();
fis.close();
bis.close();

字符流

  • 字符输入流Reader

    1. BufferedReader - LineNumberReader

    2. CharArrayReader

    3. StringReader

    4. InputStreamReader - FileReader

    5. PipedReader

    6. FilterReader - PushbackReader

  • 字符输出流Writer

    1. BufferedWriter

    2. CharArrayWriter

    3. StringWriter

    4. OutputStreamWriter - FileWriter

    5. PipedWriter

    6. FilterWriter

  • 字符缓冲输入流:BufferedReader

  • 字符缓冲输出流:BufferedWriter

//字节字符转换流
FileInputStream fis = new FileInputStream(url);
InputStreamReader isr = new InputStreamReader(fis,"UTF-8");
BufferedReader br = new BufferedReader(isr);
int n = 0;
char[] c = new char[10];
while((n=isr.read())!=-1){
   System.out.print((char)n);
}
while(n=isr.read(c)!=-1){
   String s = new String(c,0,n);
   System.out.print(s);
}

FileOutputStream fos = new FileOutputStream(url);
OutputStreamWriter osw = new OutputStreamWriter(fos,"UTF-8");
BufferedWriter bw = new BufferedWriter(osw);
while(n=isr.read(c)!=-1){
   osw.write(c,0,n); //字符输出流
   osw.fluse();
}
while(n=br.read(c)!=-1){//字符缓冲流读
   bw.write(c,0,n); //字符缓冲流写
   bw.fluse();
}

fis.close();
isr.close();
br.close();
fos.close();
osw.close();
bw.close();

对象的序列化和反序列化

序列化:把java对象转换为字节序列的过程

反序列化:把字节序列恢复为java对象的过程

  • 创建一个类,继承Serializable接口

  • 创建对象,将对象写入文件

  • 从文件读取对象信息

    • 对象输入流ObjectInputStream

    • 对象输出流ObjectOutputStream

public class Obj1 implements Serializable{}//对象类继承接口
Obj1 obj = new Obj1("","",100);//构造方法创建对象
FileOutputStream fos = new FileOutputStream(url);//创建输出文件对象
ObjectOutputStream oos = new ObjectOutputStream(fos);//创建输出流对象
oos.writeObject(obj);//将对象写入文件,实现持久化存储
oos.flush();

FileInputStream fis = new FileInputStream(url);
ObjectInputStream ois = new ObjectInputStream(fis);
obj obj_1 = (obj)ois.readObject();

fos.close();
oos.close();
fis.close();
ois.close();
 

标签:fis,JAVA,语言,f1,Day5,FileInputStream,线程,close,new
From: https://www.cnblogs.com/-Gin/p/18120807

相关文章

  • Java类全路径冲突解决方法
    1.问题今天在开发中遇到这样一个问题,A同事在导入了我们的实验SDK后,发现实验无法正常获取,查看日志发现了NoClassDefFoundError异常,无法加载的的类中逻辑比较简单,只依赖了另外一个SDK包2.NoClassDefFoundError分析和解决一般情况下,碰到NoClassDefFoundError错误,首先我们会想到......
  • Java零基础入门-String
    一、概述        近期有个小伙伴在看我的文章,说我在讲完基本类型,只是顺带提了一嘴String,然后说他的老师在课上对这String讲了足足一节课,好家伙,我觉得啊,这勾起了我的回忆,当初我看String的源码及知识点时,也是看了很久,这怪我,疏忽大意了啊。既然被这位小伙伴吐槽,那我就为......
  • Java零基础入门-多态
    一、概述        我之前上几期是教学了java类、及面向对象编程的三大基本特性,封装继承和多态。前一期,我是把继承大致讲了一遍,不知道你们对它有没有理解,何为继承,继承有啥好处,可以多继承嘛?等这类问题,我在上一期内容都有讲解,如果你们答不出来,没关系,你们可以再回去瞅瞅。......
  • java8 Lambda 异常处理
    异常接口publicclassTry{ publicstatic<T>Consumer<?superT>of(UncheckedConsumer<T>action){ Objects.requireNonNull(action); returnt->{ try{ action.accept(t); }catch(Exceptione){ thrownewRuntimeExcepti......
  • C语言程序设计-实验报告4
    实验项目名称:选择结构程序设计实验项目类型:验证性实验日期:2024年4月1日一、实验目的1.在熟练掌握if语句和switch语句的基础上,能灵活使用if语句和switch语句进行选择结构的程序设计2.学习调试程序二、实验硬、软件环境Windows计算机、Devc6.0三、实验内容及步骤实验......
  • JavaScript性能优化
    JavaScript性能优化JavaScript是前端开发中最常用的脚本语言之一,优化它的性能可以有效地提升页面响应速度和流畅度。下面介绍一些常见的JavaScript性能优化方法: 1.函数节流函数节流是指在一定时间内只执行一次函数,比如鼠标滚动事件,如果没有限制,那么每次鼠标滚动都会触发大量......
  • Java 方法真人游戏网站app
    在前面几个章节中我们经常使用到 System.out.println(),那么它是什么呢?println()是一个方法。System是系统类。out是标准输出对象。这句话的用法是调用系统类System中的标准输出对象out中的方法println()。那么什么是方法呢?Java方法是语句的集合,它们在......
  • Java中null和空的区别
    null是没有地址,会报空指针异常即报错。""是有地址但是里面的内容是空的。问题一:null和""的区别......
  • 如何使用Java和RabbitMQ实现延迟队列(方式二)?
    前言昨天写了一篇关于Java和RabbitMQ使用插件实现延迟队列功能的文章,今天来讲下另外一种方式,不需要RabbitMQ的插件。前期准备,需要安装好docker、docker-compose的运行环境。需要安装RabbitMQ的可以看下面这篇文章。如何使用PHP和RabbitMQ实现消息队列?-CSDN博客使用RabbitM......
  • 如何使用Java和RabbitMQ实现延迟队列?
    前言今天我们使用Java和RabbitMQ实现消息队列的延迟功能。前期准备,需要安装好docker、docker-compose的运行环境。需要安装RabbitMQ的可以看下面这篇文章。如何使用PHP和RabbitMQ实现消息队列?-CSDN博客今天讲的是依赖RabbitMQ的延迟插件实现消息队列的延迟功能。如何安装......