一、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. 一个使用fasttext训练的新闻文本分类器/模型

    fastext是什么? Facebook AI Research Lab 发布的一个用于快速进行文本分类和单词表示的库.优点是很快,可以进行分钟级训练,这意味着你可以在几分钟时间内就训练好一个分类模型 ...

  2. NLP interview

    2019-08-26 17:19:58 1)聊实习项目 2)代码题,二维数组中的查找某个target 3)讲一些最能体现创新能力的工作,而不是一些工程上的实现 4)讲论文可以从哪些方面做创新点,文本生 ...

  3. python set() leetcode 签到820. 单词的压缩编码

    题目 给定一个单词列表,我们将这个列表编码成一个索引字符串 S 与一个索引列表 A. 例如,如果这个列表是 ["time", "me", "bell& ...

  4. 《JavaScript 模式》读书笔记(5)— 对象创建模式2

    这一篇,我们主要来学习一下私有属性和方法以及模块模式. 三.私有属性和方法 JavaScript并没有特殊的语法来表示私有.保护.或公共属性和方法,在这一点上与Java或其他语言是不同的.JavaSc ...

  5. tigervnc使用总结

    vncserver和x0vncserver用法总计 通常vncserver :port 会调用到xvnc,这时系统会新建一个虚拟桌面通过vncserver分享出去. vncserver的用法很简单: ...

  6. 一篇文章让你了解动态数组的数据结构的实现过程(Java 实现)

    目录 数组基础简单回顾 二次封装数组类设计 基本设计 向数组中添加元素 在数组中查询元素和修改元素 数组中的包含.搜索和删除元素 使用泛型使该类更加通用(能够存放 "任意" 数据类 ...

  7. Xamarin.Forms客户端第一版

    Xamarin.Forms客户端第一版 作为TerminalMACS的一个子进程模块,目前完成第一版:读取展示手机基本信息.联系人信息.应用程序本地化. 功能简介 详细功能说明 关于TerminalM ...

  8. POJ旅行商问题——解题报告

    旅行商问题 总时间限制: 1000ms 内存限制: 65536kB 描述 某国家有n(1<=n<=10)座城市,给定任意两座城市间距离(不超过1000的非负整数).一个旅行商人希望访问每座 ...

  9. HBase 监控 | HBase Metrics 初探(一)

    前言:对于任意一个系统而言,做好监控都是非常重要的,HBase也不例外.经常,我们会从JMX中获取相关指标来做展示.对HBase进行监控,那这些指标是怎么生成的呢?如果你想自定义自己的监控指标又该怎么 ...

  10. Girls' research(马拉车算法) hdu 3294

    文章目录 思路如下 Manachar代码注释 题解如下 Problem Description One day, sailormoon girls are so delighted that they ...