本文主要是介绍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流+简单爬虫的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!