java基础总结:(1)IO流+简单爬虫

2024-06-22 18:18
文章标签 java io 爬虫 总结 简单 基础

本文主要是介绍java基础总结:(1)IO流+简单爬虫,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

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

file类常用的方法:

   方法名称                                说明
 boolean exists()     判断文件或目录是否存在
 boolean isFile()  判断是否是文件
 boolean isDirectory()判断是否是目录
 String getPath() 返回此对象表示的文件的相对路径
 String getAbsolutePath()  返回此对象表示的文件的绝对路径
String getName()返回此对象表示的文件或目录的名称
 boolean delete()  删除此对象指定的文件或目录
 boolean createNewFile() 创建名称的空文件,而不是文件夹
 long length()返回文件的长度,单位为字节,如果文件不存在,则返回0L
   mkdir      创建此抽象路径指定的目录(及只能创建一级的目录,且需要存在父目录)
   mkdirs   创建此抽象路径指定的目录,包括所有必须但不存在的父目录。(及可以创建多级目录,无论是否存在父目录)


通过流来读写文件

      流是指一连串流动的字符,是以先进先出方式发,送信息的通道
输入/输出流与数据源
        源数据源-->程序   --输入流;程序-->源数据源  --输出流
data source: 
    提供原始数据的,原始媒介。常见的:数据库、文件、其他程序、内存、网络连接、IO设备。
    数据源就像水箱,流就像水管中流着的水流,程序就是我们最终的用户。
    流是一个抽象、动态的概念,是一连串连续动态的数据集合

java 流的分类:

    按流向区分:(1)输出流:outputStream和writer作为基类
               (2)输入流:inputStream和Reader作为基类
    注意,注意,注意!!!:输入输出流是相对于计算机内存来说的,而不是相对于源和目标
    按照处理数据单元分:(1)字节流:字节输入流inputStream和字节输出流outputStream
                        (2)字符流:字符输入流reader和字符输出流writer
        字节流是 8 位通用字节流,字符流是 16 位 Unicode 字符流

    功能不同
        节点流:可以直接从数据源或目的地读写数据。
        处理流(包装流):不直接连接到数据源或目的地,是其他流进行封装。目的主要是简化操作和提高性能。
    节点流和处理流的关系
        节点流处于io操作的第一线,所有操作必须通过他们进行
        处理流可以对其他流进行处量(提高效率或操作灵活性)
文件的读写:
    文本文件的读写
        用FileInputStream和FileOutputStream读写文本文件,用BufferedReader和BufferedWriter读写文本文件
        其中FileInputStream里面的read方法:
            从输入流中读取字节:
                    int read(); //从输入流中读取单个字节数据(0~255),如到输入流末尾则返回-1
                    int read(byte b[]); //读多个字节

            FileReader的read()方法读取文本会自动换行,会读取换行符号,
            但是用了BufferedReader的readline()方法就不会自动换行了,它是读完一行,就直接存储,而不存储换行符
            另外:fileOutputStream.write()方法只接受byte[],而fileWriter.write()方法是接受字符串或者char[]
            inputStreamReader()是字节流转换为字符流,从字节到字符的桥梁
    二进制文件的读写
        使用DataInputStream和DataOutputStream读写二进制文件以及基本数据类型数据的读写
    对象的读写
         使用ObjectInputStream(流化)和ObjectOutputStream(反流化)读写对象(序列化与反序列化)
如何提高字符流读取文本文件的效率?
    使用FileReader类与BufferedReader类,BufferedWriter类是Writer类的子类,BufferedWriter类带有缓冲区
    FileInputStream和FileOutputStream以字节流的方式读写文本文件。
    BufferedReader和BufferedWriter以字符流的方式读写文本文件,而且效率更高。

获得当前开发环境的字符编码方式

   System.out.println(System.getProperty("file.encoding"));
    序列化对象:ObjectOutputStream;反序列化对象:ObjectInputStream    
    序列化:

 ObjectOutputStream oos=new ObjectOutputStream(new FileOutputStream("obj.txt"));oos.writeObject(new Person("张三",19));// 序列化oos.close();

   反序列化:

        ObjectInputStream ois=new ObjectInputStream(new FileInputStream("obj.txt"));Person p=(Person)ois.readObject();//反序列化System.out.println(p);

   1、类必须实现Serializable接口
    2、给类加个序列化编号,给类定义一个标记,新的修改后的类还可以操作曾经序列化的对象
    3、静态是不能被序列化的,序列化只能对堆中的进行序列化 ,不能对“方法区”中的进行序列化
    4、不需要序列化的字段前加 transient

附带java版微型爬虫:

    URL url = new URL("https://www.baidu.com");InputStream os = url.openStream();InputStreamReader isr = new InputStreamReader(os,"UTF-8");char[] b =new char[1024];while(isr.read(b)!=-1) {System.out.println(b);}isr.close();os.close();    


    

这篇关于java基础总结:(1)IO流+简单爬虫的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1085046

相关文章

关于C++中的虚拟继承的一些总结(虚拟继承,覆盖,派生,隐藏)

1.为什么要引入虚拟继承 虚拟继承是多重继承中特有的概念。虚拟基类是为解决多重继承而出现的。如:类D继承自类B1、B2,而类B1、B2都继承自类A,因此在类D中两次出现类A中的变量和函数。为了节省内存空间,可以将B1、B2对A的继承定义为虚拟继承,而A就成了虚拟基类。实现的代码如下: class A class B1:public virtual A; class B2:pu

Java五子棋之坐标校正

上篇针对了Java项目中的解构思维,在这篇内容中我们不妨从整体项目中拆解拿出一个非常重要的五子棋逻辑实现:坐标校正,我们如何使漫无目的鼠标点击变得有序化和可控化呢? 目录 一、从鼠标监听到获取坐标 1.MouseListener和MouseAdapter 2.mousePressed方法 二、坐标校正的具体实现方法 1.关于fillOval方法 2.坐标获取 3.坐标转换 4.坐

Spring Cloud:构建分布式系统的利器

引言 在当今的云计算和微服务架构时代,构建高效、可靠的分布式系统成为软件开发的重要任务。Spring Cloud 提供了一套完整的解决方案,帮助开发者快速构建分布式系统中的一些常见模式(例如配置管理、服务发现、断路器等)。本文将探讨 Spring Cloud 的定义、核心组件、应用场景以及未来的发展趋势。 什么是 Spring Cloud Spring Cloud 是一个基于 Spring

RedHat运维-Linux文本操作基础-AWK进阶

你不用整理,跟着敲一遍,有个印象,然后把它保存到本地,以后要用再去看,如果有了新东西,你自个再添加。这是我参考牛客上的shell编程专项题,只不过换成了问答的方式而已。不用背,就算是我自己亲自敲,我现在好多也记不住。 1. 输出nowcoder.txt文件第5行的内容 2. 输出nowcoder.txt文件第6行的内容 3. 输出nowcoder.txt文件第7行的内容 4. 输出nowcode

Javascript高级程序设计(第四版)--学习记录之变量、内存

原始值与引用值 原始值:简单的数据即基础数据类型,按值访问。 引用值:由多个值构成的对象即复杂数据类型,按引用访问。 动态属性 对于引用值而言,可以随时添加、修改和删除其属性和方法。 let person = new Object();person.name = 'Jason';person.age = 42;console.log(person.name,person.age);//'J

java8的新特性之一(Java Lambda表达式)

1:Java8的新特性 Lambda 表达式: 允许以更简洁的方式表示匿名函数(或称为闭包)。可以将Lambda表达式作为参数传递给方法或赋值给函数式接口类型的变量。 Stream API: 提供了一种处理集合数据的流式处理方式,支持函数式编程风格。 允许以声明性方式处理数据集合(如List、Set等)。提供了一系列操作,如map、filter、reduce等,以支持复杂的查询和转

一份LLM资源清单围观技术大佬的日常;手把手教你在美国搭建「百万卡」AI数据中心;为啥大模型做不好简单的数学计算? | ShowMeAI日报

👀日报&周刊合集 | 🎡ShowMeAI官网 | 🧡 点赞关注评论拜托啦! 1. 为啥大模型做不好简单的数学计算?从大模型高考数学成绩不及格说起 司南评测体系 OpenCompass 选取 7 个大模型 (6 个开源模型+ GPT-4o),组织参与了 2024 年高考「新课标I卷」的语文、数学、英语考试,然后由经验丰富的判卷老师评判得分。 结果如上图所

Vim使用基础篇

本文内容大部分来自 vimtutor,自带的教程的总结。在终端输入vimtutor 即可进入教程。 先总结一下,然后再分别介绍正常模式,插入模式,和可视模式三种模式下的命令。 目录 看完以后的汇总 1.正常模式(Normal模式) 1.移动光标 2.删除 3.【:】输入符 4.撤销 5.替换 6.重复命令【. ; ,】 7.复制粘贴 8.缩进 2.插入模式 INSERT

Java面试八股之怎么通过Java程序判断JVM是32位还是64位

怎么通过Java程序判断JVM是32位还是64位 可以通过Java程序内部检查系统属性来判断当前运行的JVM是32位还是64位。以下是一个简单的方法: public class JvmBitCheck {public static void main(String[] args) {String arch = System.getProperty("os.arch");String dataM

详细分析Springmvc中的@ModelAttribute基本知识(附Demo)

目录 前言1. 注解用法1.1 方法参数1.2 方法1.3 类 2. 注解场景2.1 表单参数2.2 AJAX请求2.3 文件上传 3. 实战4. 总结 前言 将请求参数绑定到模型对象上,或者在请求处理之前添加模型属性 可以在方法参数、方法或者类上使用 一般适用这几种场景: 表单处理:通过 @ModelAttribute 将表单数据绑定到模型对象上预处理逻辑:在请求处理之前