一、java.io包支持。java的IO流有输入、输出两种,每种输入、输出流又可分为字节流、字符流两大类,字节流以字节为单位处理IO操作,字符流以字符为单位处理IO操作
JDK 1.4以后有java.nio包,新IO,提供了全新的API,支持更高效的IO操作
二、File类
1、java.io包下代表与平台无关的文件、目录,能新建、删除、重命名文件和目录,不能访问文件本身
2、方法
(1)访问文件名或路径名
String getName() 返回File对象的文件名或路径名
String getPath() 返回File对象的路径名
File getAbsoluteFile() 绝对目录形式的File对象
String getAbsolutePath() 返回File对象的绝对路径名
String getParent() 返回父目录名
boolean renameTo(File newName) 重命名
(2)文件测试
boolean exists() 是否存在
boolean canWrite() 是否可写
boolean canRead() 是否可读
boolean isFile() 是否文件
boolean isDirectory() 是否目录
boolean isAbsolute() 是否绝对路径
(3)获取常规文件信息
long lastModified() 最后修改时间
long length() 文件内容长度
(4)文件操作
boolean createNewFile() 新建文件
boolean delete() 删除文件
static File createTempFile(String prefix,String suffix) 在默认临时文件目录中创建一个临时的空文件,pefix至少三个字节长,suffix默认是.tmp
static File createTempFile(String prefix,String suffix,File Directory) 在directory指定目录里创建临时文件
void deleteOnExit() 注册一个删除钩子,当JVM退出时删除File对象对应的文件和目录
(5)目录操作
boolean mkdir() 创建目录
String[] list() 列出File对象的所有子文件名和路径名
File[] listFiles() 列出File对象的所有子文件和路径
static File[] listRoots() 列出系统所有的根路径
3、Java支持/作为路径分隔符,与平台无关。在windows上可以用\\作为分隔符
换行符是平台有关的,windows换行符是\r\n,linux换行符是\n
4、文件过滤器
File对象的 list方法可以接受一个实现了FilenameFilter接口的类的对象(需要实现accept方法)作为参数,来过滤文件列表
三、IO流
1、概念
(1)输入流是数据流入内存,输出流是数据从内存流出。是从程序所在内存的角度来考虑的。输入流主要由InputStream和Reader作为基类,输出流主要由OutputStream和Writer作为基类
(2)字节流操作的最小数据单元是8位的字节,字符流操作的最小数据单元是16位的字符。字节流主要由InputStream和OutputStream作为基类,字符流主要由Reader和Writer作为基类
字节输入流InputStream、字节输出流OutputStream、字符输入流Reader、字符输出流Writer
(3)可以从/向一个特定的IO设备读/写数据流,称为节点流;处理流用于包装节点流。处理流可以消除不同节点流的实现差异,提供更方便的IO方法。是一种典型的装饰器实现模式
2、InputStream和Reader
是所有输入流的基类,是抽象类
(1)InputStream提供的方法
int read() 从输入流中读取单个字节,并以int形式返回
int read(byte[] b) 从输入流中最多读取b.length个字节,并存入b数组,返回实际读取的字节数
int read(byte[] b,int off,int len) 从输入流中最多读取len个字节,并在数组off起点处存入b数组,返回实际读取的字节数
(2)Reader提供的方法
int read() 从输入流中读取单个字符,并以int形式返回
int read(char[] cbuf) 从输入流中最多读取 cbuf.length个字符,并存入cbuf 数组,返回实际读取的字符数
int read(char[] cbuf,int off,int len) 从输入流中最多读取len个字符,并在数组off起点处存入cbuf 数组,返回实际读取的字符数
(3)子类
用于读取文件的节点流:FileInputStream和FileReader
文件IO无法自动回收,需要在finally块里显式用close方法
增加的方法
void mark(int readAheadLimit) 在记录指针当前位置记录一个标记
boolean markSupported() 判断此输入流是否支持mark操作
void reset() 将此流的记录指针重新定位到上一个标记的位置
long skip(long n) 记录指针向前移动n个字节/字符
3、OutputStream和Writer
void write(int c) 将指定字节/字符输出到输出流中
void write(byte[]/char[] buf) 将字节/字符数组输出到输出流中
void write(byte[]/char[] buf,int off,int len) 将字节/字符数组从off开始,输出len个字节/字符到输出流中
Write特有的
void write(String buf)
void write(String buf,int off,int len)
四、IO流体系
1、处理流
(1)输入
BufferedReader=new BufferedReader(new InputStreamReader(new FileInputStream("a.java")));
(2)输出
PrintStream ps=new PrintStream(new FileOutputStream("a.java"));
2、使用场景
所有能用记事本打开并看到其中内容的,都是文本文件;其他的是二进制文件
若需要进行IO的内容是文本文件,则用字符流;需要进行IO的内容是二进制文件,则用字节流。
3、推回输入流
对照read方法增加了三个unread方法,将指定内容推到推回缓冲区,推回输入流在进行read操作时,总是先从推回缓冲区中进行读取,只有完全读取了缓冲区的内容而未填满数组时才会从原输入流中读取。
4、重定向标准输入输出
System的静态方法。定义后System.out、System.in操作的流将发生变化
static void setOut(PrintStream out) 定义标准输出流
static void setIn(InputStream in) 定义标准输入流
static void setErr(PrintStream err) 定义标准错误输出流
5、JVM读取其他进程的数据
Process对象提供了三个方法,用于程序和其子进程进行通信。Process对象由Runtime对象的exec()方法生成
InputStream getInputStream() 获取子进程的输入流
InputStream getErrorStream() 获取子进程的错误输出流
OutputStream getOutputStream() 获取子进程的输出流
当子进程获取进程数据时,需要用输出流
Process p=Runtime.getRuntime().exec("javac");
BufferedReader br=new BufferedReader(new InputStreamWriter(p.getErrorStream()));
6、RandomAccessFile
任意访问文件,可以在文件的任意地方来读写数据
(1)构造器
RandomAccessFile(String name, String mode) mode: r只读  rw读写 rwd读写且内容的更新都同步写入到底层存储设备 rws读写且内容元数据的更新都同步写入到底层存储设备
RandomAccessFile(File file, String mode)
(2)操作文件指针
long getFilePointer() 返回文件记录指针的当前位置
void seek(long pos) 文件记录指针定位到pos
(3)若要追加写入文件,可以seek(raf.length())定位到最后再写入
若要在中间写入,需要先将插入点后的字符写入缓冲区(如临时文件)里,再从插入点写入新的字符,再将缓冲区里的数据追加写进去

【JAVA】并发-基础IO的更多相关文章

  1. Java 并发基础

    Java 并发基础 标签 : Java基础 线程简述 线程是进程的执行部分,用来完成一定的任务; 线程拥有自己的堆栈,程序计数器和自己的局部变量,但不拥有系统资源, 他与其他线程共享父进程的共享资源及 ...

  2. java并发基础(二)

    <java并发编程实战>终于读完4-7章了,感触很深,但是有些东西还没有吃透,先把已经理解的整理一下.java并发基础(一)是对前3章的总结.这里总结一下第4.5章的东西. 一.java监 ...

  3. 【搞定 Java 并发面试】面试最常问的 Java 并发基础常见面试题总结!

    本文为 SnailClimb 的原创,目前已经收录自我开源的 JavaGuide 中(61.5 k Star![Java学习+面试指南] 一份涵盖大部分Java程序员所需要掌握的核心知识.欢迎 Sta ...

  4. java并发基础(五)--- 线程池的使用

    第8章介绍的是线程池的使用,直接进入正题. 一.线程饥饿死锁和饱和策略 1.线程饥饿死锁 在线程池中,如果任务依赖其他任务,那么可能产生死锁.举个极端的例子,在单线程的Executor中,如果一个任务 ...

  5. Java并发基础概念

    Java并发基础概念 线程和进程 线程和进程都能实现并发,在java编程领域,线程是实现并发的主要方式 每个进程都有独立的运行环境,内存空间.进程的通信需要通过,pipline或者socket 线程共 ...

  6. java并发基础及原理

    java并发基础知识导图   一 java线程用法 1.1 线程使用方式 1.1.1 继承Thread类 继承Thread类的方式,无返回值,且由于java不支持多继承,继承Thread类后,无法再继 ...

  7. Java并发基础框架AbstractQueuedSynchronizer初探(ReentrantLock的实现分析)

    AbstractQueuedSynchronizer是实现Java并发类库的一个基础框架,Java中的各种锁(RenentrantLock, ReentrantReadWriteLock)以及同步工具 ...

  8. Java 并发基础常见面试题总结

    1. 什么是线程和进程? 1.1. 何为进程? 进程是程序的一次执行过程,是系统运行程序的基本单位,因此进程是动态的.系统运行一个程序即是一个进程从创建,运行到消亡的过程. 在 Java 中,当我们启 ...

  9. Java 并发基础知识

    一.什么是线程和进程? 进程: 是程序的一次执行过程,是系统运行程序的基本单元(就比如打开某个应用,就是开启了一个进程),因此进程是动态的.系统运行一个程序即是一个程序从创建.运行到消亡的过程. 在 ...

  10. Java并发基础:进程和线程之由来

    转载自:http://www.cnblogs.com/dolphin0520/p/3910667.html 在前面,已经介绍了Java的基础知识,现在我们来讨论一点稍微难一点的问题:Java并发编程. ...

随机推荐

  1. 2020.3.23 模拟赛游记 & 题解

    这次的模拟赛,实在是水. 数据水,\(\texttt{std}\) 水,出题人水,做题人也水.??? 游记就说一句: 水. T1 metro 弱智题. 人均 \(100pts\). #pragma G ...

  2. 【codeforces】Codeforces Round #612 (Div. 2) C. Garland——DP

    题目链接 贪心模拟了半天,最后放弃了 题意 给你一串从1−n1-n1−n的序列,其中部分未知(表示为0),补全序列使得相邻数值奇偶性相反的数量最少 相邻数值的奇偶性相反:两个相邻的两个数值,其中一个为 ...

  3. 五、运算符的补充与if语句

    1.可变不可变类型 指:对前面所学类型做一个可变和不可变类型的分类 可变类型:值改变,ID不变,证明改的是原值,原值是可以被改变的 不可变类型:值改变,ID也变了,证明是产生新的值,压根没有改变原值, ...

  4. Java - Java开发中的安全编码问题

    目录 1 - 输入校验 1.1 SQL 注入防范 1.2 XSS防范 1.3 代码注入/命令执行防范 1.4 日志伪造防范 1.5 XML 外部实体攻击 1.6 XML 注入防范 1.7 URL 重定 ...

  5. vim-1-window,buffer and tab

    Summary:A buffer is the in-memory text of a file. A window is a viewport on a buffer. A tab page is ...

  6. 一 JVM垃圾回收模型

    一 JVM垃圾回收模型 一. GC算法 1.1 标记-清除算法(Mark-Sweep) 算法分为"标记"和"清除"两个阶段首先标记出所有需要回收的对象,然后回收 ...

  7. poj——1182食物链 并查集(提升版)

    因为是中文题,题意就不说了,直接说思路: 我们不知道给的说法中的动物属于A B C哪一类,所以我们可以用不同区间的数字表示这几类动物,这并不影响结果,我们可以用并查集把属于一类的动物放在一块,举个例子 ...

  8. docker下centos7编译安装ffmpeg

    1.安装基础命令 docker下精简版centos没有make等命令,先安装: yum -y install gcc automake autoconf libtool make yum instal ...

  9. SpringBoot中遇到的一些问题

    1.JQuery和bootstrap报404的问题 在html页面导入的js和css的时候,不要加static这级目录,直接跳过即可,例如 导入的时候不需要加static目录,直接导入js/和css/ ...

  10. 使用kibana操作elasticsearch7.x 教程

    由于elasticsearch7.x取消了type(类型的概念)对应数据库表的概念 添加一个索引 PUT 索引名 { "settings": { "number_of_s ...