输入输出-总

1.File类

File类可以使用文件路径字符串来创建File实例,该文件路径字符串既可以是绝对路径,也可以是相对路径,默认情况下,系统总是依据用户的工作路径来解释相对路径,这个路径由系统属性“user.dir”指定,通常也就是运行Java虚拟机时所在的路径。
File不能访问文件内容本身。如果需要访问文件内容本身,则需要使用输入/输出流。

----------------------------------------------------------------------------------------------

2.文件过滤器--FilenameFilter接口

在File的list方法中可以接受一个FilenameFilter参数,通过该参数可以只列出符合条件的文件。
FilenameFilter接口里包含了一个accept(File dir, String name)方法,该方法将依次对指定File的所有子目录、子文件夹进行迭代,如果该方法返回true则list方法会列出该子目录或者子文件。

3.

字符流--Reader\Writer

字节流--InputStream\OutputStream

在使用时都使用它们的实现类,以下常用的公共方法
Reader:

int read() Reads a single character.
int read(char[] cbuf) Reads characters into an array.
abstract int read(char[] cbuf, int off, int len) Reads characters into a portion of an array.
int read(CharBuffer target) Attempts to read characters into the specified character buffer.
-----------------------------------------------------------------------------
InputStream:

abstract int read() Reads the next byte of data from the input stream.
int read(byte[] b) Reads some number of bytes from the input stream and stores them into the buffer array b.
int read(byte[] b, int off, int len) Reads up to len bytes of data from the input stream into an array of bytes.
------------------------------------------------------------------

Writer

Writer append(char c) Appends the specified character to this writer.
Writer append(CharSequence csq) Appends the specified character sequence to this writer.
Writer append(CharSequence csq, int start, int end)
Appends a subsequence of the specified character sequence to this writer.
abstract void close() Closes the stream, flushing it first.
abstract void flush() Flushes the stream.
void write(char[] cbuf) Writes an array of characters.
abstract void write(char[] cbuf, int off, int len) Writes a portion of an array of characters.
void write(int c) Writes a single character.
void write(String str) Writes a string.
void write(String str, int off, int len) Writes a portion of a string.
------------------------------------------------------------------

OutputStream

void close() Closes this output stream and releases any system resources associated with this stream.
void flush() Flushes this output stream and forces any buffered output bytes to be written out.
void write(byte[] b) Writes b.length bytes from the specified byte array to this output stream.
void write(byte[] b, int off, int len) Writes len bytes from the specified byte array starting at offset off to this output stream.
abstract void write(int b) Writes the specified byte to this output stream. 

-------------------------------------------------------------------------------------------------------------

4.输入/输出流体系

http://www.cnblogs.com/moonpool/p/5488463.html

文本文件的读写
用FileInputStream读文件
用FileOutputStream写文件
用BufferedReader读文本文件
用BufferedWriter写文本文件
二进制文件的读写
DataOutputStream
DataInputStream

----------------------------------------------------------------------------------------------------------------------

5.转换流--InputStreamReader OutputStreamWriter

转换流用于实现将字节流转换成字符流,其中InputStreamReader将字节输入流转换成字符输入流,OutputStreamWriter将字节输出流转换成字符输出流

------------------------------------------------------------------------------------------------------------------------------------------------

6.推回流--PushbackInputStream PushbackReader

提供了如下三个方法:
void unread(byte[]/char[] buf):将一个字节/字符数组内容的推回到推回缓冲区里,从而允许重复读取刚刚读取的内容。
void unread(byte[]/char[] b, int off, int len):将一个字节/字符数组里从off开始,长度为len字节/字符的内容推回到推回缓冲区里,从而允许重复读取刚刚读取的内容。
void unread(int b) :将一个字节/字符的推回到推回缓冲区里,从而允许重复读取刚刚读取的内容。

------------------------------------------------------------------------------------------------------------------------------------------

7.重定向标准输入/输出 System.in System.out

标准输入/输出的方法:
static void setErr(PrintStream err):重定向 “标准”错误输出流。
static void setIn(InputStream in):重新分配“标准”输入流。
static void setOut(PrintStream out):重定向 “标准”输出流。

------------------------------------------------------------------------------------------------

8.Java虚拟机读取其他进程的数据

用Runtime对象的exec方法可以运行平台上的其他程序,该方法产生一个Process对象,Process对象代表由该Java程序启动的子进程。

Process类提供下面三个方法让程序和其他子进程进行通讯。

InputStream getErrorStream():获取子进程的错误流

InputStream getInputStream():获取子进程的输入流

OututStream getOutputStream():获取子进程的输出流

-----------------------------------------------------------------------------------------------

9.RandomAccessFile类

它提供了众多的方法来访问文件内容,它既可以读取文件内容,也可以向文件输出数据。与普通的输入/输入流不同的是,RandomAccessFile支持“随机访问”的方式,程序可以直接跳转到文件的任意地方来读写数据。

RandomAccessFile对象也包含了一个记录指针,用以标识当前读写处的位置,当程序新创建一个RandomAccessFile对象时,该对象的文件记录指针位于文件头(也就是0处),当读/写了n个字节后,文件记录指针将会向后移动n个字节。除此之外,RandomAccessFile可以自由移动该记录指针,既可以向前移动,也可以向后移动。RandomAccessFile包含了如下两个方法来操作文件记录指针:
----long getFilePointer():返回文件记录指针的当前位置。
----void seek(long pos):将文件记录指针定位到pos位置。
RandomAccessFile类有两个构造器,其实这两个构造器基本相同,真是指定文件的形式不同而已:一个使用String参数来指定文件名,一个使用File参数来指定文件本身。除此之外,创建RandomAccessFile对象时还需要指定一个mode参数,该参数指定RandomAccessFile的访问模式。

-------------RandomAccessFile(File file, String mode) Creates a random access file stream to read from, and optionally to write to, the file specified by the File argument. 
-------------RandomAccessFile(String name, String mode) Creates a random access file stream to read from, and optionally to write to, a file with the specified name.

该参数有如下四个值:
----"r":以只读方式打开指定文件。如果试图对该RandomAccessFile执行写入方法都将会抛出 IOException。
----"rw":以读取、写入方式打开指定文件。如果该文件尚不存在,则尝试创建该文件。
----"rws":以读取、写入方式打开指定文件。相对于对于 "rw"模式,还要求对文件的内容或元数据的每个更新都同步写入到底层存储设备。
----"rwd":以读取、写入方式打开指定文件。对于 "rw",还要求对文件内容的每个更新都同步写入到底层存储设备。

RandomAccessFile依然不能向文件的指定位置插入内容,如果直接将文件记录指针移动到中间某位置后开始输出,则新输出的内容会覆盖文件中原有的内容。
如果需要向指定位置插入内容,程序需要先把插入点后面内容读入缓冲区,等将需要插入的数据写入文件后,再将缓冲区的内容追加到文件后面。

-----------------------------------------------------------------------------------------------------------------------

10.对象序列化--Serializable接口

序列化机制允许将实现序列化的Java对象转换为字节序列,这些字节序列可以被保存在磁盘上,或通过网络传输,以备以后重新恢复成原来的对象。序列化机制使得对象可以脱离程序的运行而独立存在。
对象的序列化(Serialize)指将一个Java对象写入IO流中,与此对应的是,对象的反序列化(Deserialize)则指从IO流中恢复该Java对象。
如果需要让某个对象可以支持序列化机制,必须让它的类是可序列化的(serializable),为了让某个类是可序列化的,该类必须实现如下两个接口之一:
----Serializable
----Externalizable

如下两个步骤来序列化对象。
(1)创建一个ObjectOutputStream,这个输出流是一个处理流,所以必须建立在其他节点流的基础之上。
(2)调用ObjectOutputStream对象的writeObject方法输出可序列化对象。

反序列化步骤

(1)创建一个ObjectInputStream,这个输入流是一个处理流,所以必须建立在其他节点流的基础之上。
(2)调用ObjectInputStream对象的readObject对象读取流中的对象,该方法返回一个Object类型的Java对象,如果程序知道该Java对象的类型,则可以将该对象强制类型转换成其真实的类型。

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

自定义序列化--transient关键字

在属性前面加上transient关键字,可以指定Java序列化时无需理会该属性值。
在序列化和反序列化过程中需要特殊处理的类应该提供如下特殊签名的方法,这些特殊的方法用以实现自定义序列化:
private void writeObject(java.io.ObjectOutputStream out)throws IOException
private void readObject(java.io.ObjectInputStream in)throws IOException, ClassNotFoundException;
private void readObjectNoData()throws ObjectStreamException;

---------------------------------------------------------------------

11.NIO

Buffer缓冲

从内部结构上来看,Buffer就像一个数组,它可以保存多个类型相同的数据。Buffer是一个抽象类,其最常用的子类是ByteBuffer,它可以在底层字节数组上进行get/set操作,除了ByteBuffer之外,其他基本数据类型(boolean除外)都有相应的Buffer类:ByteBuffer、CharBuffer、ShortBuffer、IntBuffer、LongBuffer、FloatBuffer、DoubleBuffer
容量(capacity):缓冲区的 容量(capacity) 表示该Buffer的最大数据容量,即最多可以存储多少数据。缓冲区的容量不可能为负值,在创建后也不能改变。
界限(limit):第一个不应该被读出或者写入的缓冲区位置索引。也就是说,位于limit后的数据既不可被读,也不可被写。
位置(position):用于指明下一个可以被读出的或者写入的缓冲区位置索引(类似于IO流中的记录指针)。当使用Buffer从Channel中读取数据时,position的值恰好等于已经读到了多少数据。当刚刚新建一个Buffer对象时,其position为0,如果从Channel中读取了2个数据到该Buffer中,则postion为2,指向Buffer中第三个(第一个位置的索引为0)位置。

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Channel通道
Channel类似于传统的流对象,但与传统的流不同的是,Channel有两个主要的区别:
Channel可以直接将指定文件的部分或全部映射成Buffer。
程序不能直接访问Channel中的数据,包括读取、写入都不行,Channel只能与Buffer进行交互。也就是说,如果要从Channel中取得数据,必须先用Buffer从Channel中取出一些数据,然后让程序从Buffer中取出这些数据;如果要将程序中的数据写入Channel,一样先让程序将数据放入Buffer中,程序再将Buffer里的输入写入Channel中。
Channel是一个接口,位于java.nio.channels包下,系统为该接口提供了DatagramChannel、 FileChannel、Pipe.SinkChannel、Pipe.SourceChannel、SelectableChannel、ServerSocketChannel, SocketChannel等实现类,本节主要介绍FileChannel的用法,根据这些Channel的名字我们不难发现新IO里的Channel是按功能来划分的,例如Pipe.SinkChannel、Pipe.SourceChannel用于支持线程之间通信的管道Channel,而ServerSocketChannel、SocketChannel则是用于支持TCP网络通信的Channel。

Selector

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Charset

通常而言,把明文的字符串序列转换成计算机理解的字节序列(二进制文件,普通人看不懂)成为编码,把字节序列转化成普通人能看懂的明文字符串称为解码。
Charset里也提供了如下三个方法:
CharBuffer decode(ByteBuffer bb):将ByteBuffer中字节序列转换成字符序列的的便捷方法。
ByteBuffer encode(CharBuffer cb):将CharBuffer中的字符序列转换成字节序列的便捷方法。
ByteBuffer encode(String str):将String中的字符序列转换成字节序列的便捷方法。

FileLock

-----------------------------------------------------------------------------

12.NIO.2

Path\Paths\Files

Path - 接口,代表一个平台无关的目录。提供了大量的方法来操作目录。
Paths - 工具类。所有方法都是static的。
Files - 操作文件的工具类。提供了大量的方法来操作文件。该类所包含的大量方法可能与我们日常一般的期望有些出入。

FileVisitor

WatchService

java.nio.file.attribute--FileAttributeView接口

时间: 2024-10-17 22:28:56

输入输出-总的相关文章

自己做的一个输入输出缓冲池

2014-05-15 22:02 by Jeff Li 前言 系列文章:[传送门] 马上快要期末考试了,为了学点什么.就准备这系列的博客,记录复习的成果. 正文-计数  概率 概率论研究随机事件.它源于赌徒的研究.即使是今天,概率论也常用于赌博.随机事件的结果是否只凭运气呢?高明的赌徒发现了赌博中的规律.尽管我无法预知事件的具体结果,但我可以了解每种结果出现的可能性.这是概率论的核心. "概率"到底是什么?这在数学上还有争议."频率派"认为概率是重复尝试多次,某种结

C输入输出与文件

一.终端I/O 1.单字符I/O:getchar(),putchar() (1)单字符输入(get character): [ int getchar();] 返回值为输入的字符(ASCII).可以接受任何字符,包括非打印字符.当一次键入多个字符时按下回车键后getchar开始逐个读取所有字符(包括回车符). 在某些编译环境下,因为scanf()函数不读取回车符且将其留在输入队列中,下次调用scanf()时会由于先读取到回车符而在读取数据前过早结束输入,所以常在scanf后用[getchar()

mybatis系列笔记(4)---输入输出映射

输入输出映射 通过parameterType制定输入参数类型 类型可以是简单类型(int String)也可以是POJO本身 或者包装类 1输入映射 关于输入简单类型和pojo本身的我就不写了,因为比较简单,下面我主要举一个包装类的例子: 使用包装类POJO 将复杂的查询条件封装到POJO中 1 //当你继承user属性后,你就可以在user的基础上添加自己的属性了 2 public class UserCustomer extends User { 3 4 //用户的基本信息 5 //可以扩展

输入输出与文件

输入输出与文件 一.终端I/O 1.单字符I/O:getchar(),putchar() (1)单字符输入(get character): [ int getchar();] 返回值为输入的字符(ASCII).可以接受任何字符,包括非打印字符.当一次键入多个字符时按下回车键后getchar开始逐个读取所有字符(包括回车符). 在某些编译环境下,因为scanf()函数不读取回车符且将其留在输入队列中,下次调用scanf()时会由于先读取到回车符而在读取数据前过早结束输入,所以常在scanf后用[g

c语言输入输出缓冲区的概念

语言输入输出缓冲区的概念 你肯定会奇怪为什么一开始先说这个,一开始不都是数据类型什么的嘛,这个写在最前面因为后面的程序即使最简单的code都会用到输入输出,输出比较简单,可以放在后面再说,但是输入就不同了,如果不先了解一下,可能会得到和你预想不同的结果哦^_^.也正是由于和一般的c语言介绍方式不同,为了看起来正规一些,我就把这章叫做chapter0了,完全可以先跳过去,直接看chapter1. 1.getchar 先引用一下前人的成果(有修改)^_^:http://blog.csdn.net/c

NOIP2011-普及组复赛模拟试题-第一题-NBA总冠军

题目背景 Background 一年两度的期末考要到来了!! 题目描述 Description 又要到考试了,Ljw决定放松一下,就打开电视,看见了篮球赛,他立即想到了每年的NBA总冠军队伍.由于复习紧张,他只记起了一部分,记忆的内容是正确的,可能不是按时间顺序排列的,记忆的内容可能有重复. 现在请求学过编程的你帮助Ljw,按时间顺序输出总冠军的球队(不能重复). (NBA从1947A.D到2009A.D) 输入输出格式 Input/output 输入格式:输入文件nba.in的第一行是一个整数

python文件和输入输出

文件和输入输出 __builtins__模块中和输入输出相关的函数: print(value,...[, sep=' ', end='\n', file=sys.stdout, flush=False]) file默认是打印到stdout,也可以重定向到别的地方 sep表示value之间插入的字符串,默认是一个空格 end表示最后一个value之后的内容,默认是换行 flush表示是否强制冲刷流,默认缓冲 print默认在输出后添加换行,如果不换行添加逗号,解决. python风格的字符串格式化

1.1编程基础之输入输出_01:Hello, World!

/* 1.1编程基础之输入输出 01:Hello, World! 总时间限制: 1000ms 内存限制: 65536kB 描述 对于大部分编程语言来说,编写一个能够输出"Hello, World!" 的程序往往是最基本.最简单的. 因此,这个程序常常作为一个初学者接触一门新的编程语言所写的第一个程序, 也经常用来测试开发.编译环境是否能够正常工作. 现在你就需要完成这样一个程序. 输入 无. 输出 一行,仅包含一个字符串:"Hello, World!" 样例输入 (

5.USART异步串行口输入输出(轮询模式)

学习是一个简单的过程,只要有善于发掘的眼睛,总能学到新知识,然而如何坚持不懈的学习却很困难,对我亦如此,生活中有太多的诱惑,最后只想说一句勿忘初心.闲话不多扯,本篇讲诉的是异步串行口的输入输出,串口在外设中属于比较简单的通讯模式,但是在大型项目调试中又十分重要,理解该外设模块对于以后的通讯协议学习以及软件调试都有重要意义. 通讯协议是指双方实体完成通信或服务所必须遵循的规则和约定,对于串口来说,包含波特率,数据位长度,停止位和数据校验位,当stm32芯片和客户端具有相同的协议约定时即能够正确的接