一、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. 面试刷题21:java并发工具中的队列有哪些?

    ![image.png](https://img2020.cnblogs.com/other/268922/202003/268922-20200330183801141-1514127119.png ...

  2. shell脚本介绍以及常用命令

    Shell脚本 Shell Script,Shell脚本与Windows/Dos下的批处理相似,也就是用各类命令预先放入到一个文件中,方便一次性执行的一个程序文件,主要是方便管理员进行设置或者管理用的 ...

  3. js实现动态球球背景

    document.getElementsByTagName("body")[0].style.backgroundColor="#000" //构造函数 fun ...

  4. Linux - 文件的三种时间之atime、ctime、mtime的区别和简单用法

    在Linux中,文件或者目录中有三个时间属性 atime ctime mtime 简名 全名 中文 作用 atime Access Time 访问时间 最后一次访问文件(读取或执行)的时间 ctime ...

  5. 3分钟了解GPT Bert与XLNet的差异

    译者 | Arno 来源 | Medium XLNet是一种新的预训练模型,在20项任务中表现优于BERT,且有大幅度的提升. 这是什么原因呢? 在不了解机器学习的情况下,不难估计我们捕获的上下文越多 ...

  6. Python第十一章-常用的核心模块01-collections模块

    python 自称 "Batteries included"(自带电池, 自备干粮?), 就是因为他提供了很多内置的模块, 使用这些模块无需安装和配置即可使用. 本章主要介绍 py ...

  7. Cygwin工具编译Ardupilot方法

    注意:该编译方法生成的固件基于Chibios系统,如果想要Nuttx系统固件,需采用make编译,步骤见make编译说明部分. 软件安装准备 安装Cygwin 打开链接www.cygwin.com/i ...

  8. Jupyter修改主题,字体,字号-教程

    cmd控制台安装主题工具包:主题更换工具详解 pip install --upgrade jupyterthemes 查看可用主题: jt -l 设定主题: jt -t 主题名称 恢复默认主题: jt ...

  9. Pytest系列(5) - 用例执行的几种状态

    如果你还想从头学起Pytest,可以看看这个系列的文章哦! https://www.cnblogs.com/poloyy/category/1690628.html 用例执行状态 用例执行完成后,每条 ...

  10. U - Inviting Friends HDU - 3244( LIS 最长升序子序列——变形 )

    序列变换 Problem Description 我们有一个数列A1,A2-An,你现在要求修改数量最少的元素,使得这个数列严格递增.其中无论是修改前还是修改后,每个元素都必须是整数. 请输出最少需要 ...