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)