在Java中,通过java.io包提供的类来表示流,基本的输入输出流为InputStream和OutputStream。从这两个基本的输入输出流派生出面向特定处理的流,如缓冲区读写流、文件读写流等。

1  InputStream类

InputStream是抽象类,代表字节输入流的所有类的超类。这个类本身不能使用,只能通过继承它的具体类完成某些操作。它的常用方法如下:

public int available() throws IOException                             返回流中可用的字节数。

public void close() throws IOException                               关闭流并释放与流相关的系统资源。用户使用完输入流时,调用这个方法。

public void mark(int readlimit) throws IOException               输入流中标志当前位置。

public boolean markSupported() throws IOException          测试流是否支持标志和复位。

public abstract int read() throws IOException                     读取输入流中的下一个字节。

public int read(byte[] b) throws IOException                      从输入流中读取字节并存储到缓冲区数组b中,返回读取的字节数,遇到文件结尾返回-1。

public int read(byte[] b, int off, int len) throws IOException 从输入流中读取len个字节并写入b中,位置从off开始。返回写的字节数。

public void reset() throws IOException                               重定位到上次输入流中调用的位置。

public long skip(long n) throws IOException                        跳过输入流中n个字节,返回跳过的字节数,遇到文件结尾返回-1。

2  OutputStream类

OutputSteam是抽象类,代表输出字节流的所有类的超类。

public void close() throws IOException                                         关闭输出流,释放与流相关的系统资源。

public void flush() throws IOException                                         清洗输出流,使得所有缓冲区的输出字节全部写到输出设备中。

public void write(byte[] b) throws IOException                             从特定字节数组b将b数组长度个字节写入输出流。

public void write(byte[] b, int off, int len) throws IOException        从特定字节数组b将从off开始的len个字节写入输出流。

public abstract void write(int b) throws IOException                      向输出流写一个特定字节。

3  系统输入输出对象

Java定义了两个流对象System.in和System.out,允许用户在自己的程序中直接使用。System.in对象允许用户从键盘读取数据,System.out对象可以产生屏幕输出。

例:使用流对象System.in和System.out,接收用户从键盘上输入的数据并将数据输出到屏幕上。

 package inputOutput;
import java.io.*; public class SystemIO {
public static void main(String[] args)
{
int bytes = 0;
byte buf[] = new byte[255];
System.out.println("\n请输入任意文本:");
try
{
//接收输入字符串
bytes = System.in.read(buf,0,255); System.out.println("这是你输入的文本行:");
String inStr = new String(buf,0,bytes);
//输出字符串
System.out.println(inStr);
}
catch(IOException e)
{
System.out.println(e.getMessage());
}
}
}

4  FileInputStream类

FileInputStream(文件输入流)类是用来得到文件的输入字节流。大部分方法继承于InputStream类。它的构造方法如下:

FileInputStream(File file)                                                           通过打开一个到实际文件的链接,创建一个文件输入流,参数file是一个文件对象。

FileInputStream(String name)                                                   通过打开一个到实际文件的链接,创建文件输入流,参数name为文件的实际路径。

例:使用FileInputStream对象打开源程序文件

 package inputOutput;

 import java.io.*;
public class UseFileInputStream
{
public static void main(String[] args)
{
byte buf[] = new byte[2056];
try
{
//构造文件输入流
FileInputStream fileIn = new FileInputStream("UseFileInputStream.java");
//存入缓冲buf
int bytes = fileIn.read(buf,0,2056);
String inStr = new String(buf,0,bytes);
//输出文件内容
System.out.println(inStr);
}
catch(IOException e){
System.out.println(e.getMessage());
}
}
};

注:此时需要用System.getProperty("user.dir");打印出来看看是在哪个文件夹。需将UseFileInputStream放到此文件夹下。

5  FileOutputStream类

FileOutputStream(文件输出流)类是将数据写入File或 FileDescriptor对象的输出流。它的方法大都是从OutStream继承来的,其构造方法如下:

FileOutputStream(File file)                                                         创建输出流写到特定的file对象。

FileOutputStream(File file, boolean append)                                以追加的方式写入file对象。

FileOutputStream(FileDescriptor fdObj)                                      创建输出文件流到fdObj对象,代表一个到实际文件的链接。

FileOutputStream(String name)                                                创建输出流,写到指定的name文件。

FileOutputStream(String name, boolean append)                        是否以追加的方式写到指定的name文件。

例:使用FileOutputStream对象,打开一个文件,写入一行文本,然后追加一行从键盘接收的字符串

 package inputOutput;
import java.io.*; public class UseFileOutputStream { public static void main(String[] args) {
// TODO 自动生成的方法存根
byte buf[] = new byte[255];
byte bufIn[] = new byte[255];
try
{
String str = "你好,这是已有的文本";
buf = str.getBytes();
//创建文件输出流对象
FileOutputStream fileOut = new FileOutputStream("Hello.txt");
//写入文件
fileOut.write(buf,0,buf.length);
//fileOut.flush();
//fileOut.close();
System.out.println("\n请输入一行文本:");
//从键盘接收文本
int bytes = System.in.read(bufIn,0,255);
//追加文本
//fileOut = new FileOutputStream("Hello.txt",true);
fileOut.write(bufIn,0,bytes);
fileOut.flush();
fileOut.close();
}
catch(IOException e)
{
System.out.println(e.getMessage());
}
}
}

6  File类

用户接口和操作系统使用依赖于系统的路径字符串来命名文件和目录。File类就表示这些文件和目录路径,它代表一个抽象的依赖于系统的层次路径视图。File类允许用户向系统查询该文件的所有信息,也可以使用类来创建新的目录或者删除和重命名文件。当用户需要获得有关文件的信息时,就需要创建一个File类,而当File类用于文件读写时,通常与FileInputStream流相结合。

 package inputOutput;

 import java.io.*;

 public class UseFile {

     public static void main(String[] args) {
// TODO 自动生成的方法存根
try
{
File f = new File("temp.txt");
System.out.println("创建临时文件");
FileOutputStream fout = new FileOutputStream(f);
PrintStream p = new PrintStream(fout);
p.println("将这句话放入临时文件");
System.out.println("写临时文件");
f.deleteOnExit();
System.out.println("删除临时文件");
}
catch(IOException e)
{
System.out.println(e.getMessage());
}
}
}

7  RandomAccessFile类

RandomAccessFile(随机访问文件)类的实例支持对随机访问文件的读/写。随机访问文件就像存储在文件系统中的巨大的字节数组,通过游标或者索引(叫做文件指示器)指向这个暗含的数组,输入操作从指示器处读取字节,然后前进指针。如果随机访问文件以可读/写模式创建,那么还支持输出操作,输出操作写到暗含数组的尾端,使得数组得以扩展。

例:随机访问文件,将文件内容输出,并写入两个字符“O”、“K”。若文件内容直接输出到屏幕上,的乱码问题,添加一个parseChinese方法后,得以修正。

 package inputOutput;
import java.io.*; public class UseRandom { public static void main(String[] args) {
// TODO 自动生成的方法存根
try
{
//构建随机访问文件对象
RandomAccessFile f = new RandomAccessFile("Hello1.txt","rw");
//得到文件指针和长度
long flag = 0;
long len = f.length();
//字符处理后输出
while(flag <len)
{
String s = f.readLine();
System.out.println(parseChinese(s));
flag = f.getFilePointer();
}
//末尾写入字符
f.writeChar('O');
f.writeChar('K');
f.writeUTF("美女,你好!");
}
catch(IOException e)
{
System.out.println(e.getMessage());
}
}
//解决中文转换问题
public static String parseChinese(String inStr)
{
String s = null;
byte temp[];
if (inStr == null)
{
return new String("");
}
try
{
temp=inStr.getBytes("iso-8859-1");
s = new String(temp);
}
catch(UnsupportedEncodingException e)
{
System.out.println (e.toString());
}
return s;
}
}

8  对象流

8.1  ObjectInputStream类

ObjectInputStream(对象输入流)可读取使用对象输出流写入的原始数据和类型,与文件输入输出流一起可以实现对象的持久性存储。它的构造函数和一个读对象的方法如下:

public ObjectInputStream(InputStream in) throws IOException                    从特定的输入流中读取并创建一个对象输入流。

Public Object readObject()                                                                        从对象输入流中读取对象。

8.2  ObjectOutputStream类

ObjectOutputStream(对象输出流)可将Java的原始数据类型和图形写入输出流,对象可以使用对象输入流读取,使用文件可以实现对象的持久存储。它的构造函数和一个写对象方法如下:

public ObjectOutputStream(OutputStream out) throws IOException            创建一个对象输出流,可以写入特定的输出流。

void writeObject(Object obj)                                                                    将对象obj写入对象输出流。

例:将日期对象和向量对象写入文件,然后从文件中读出并输出到屏幕上。要求向量对象含有三个值“语文”、“数学”和“物理”。

 package inputOutput;
import java.io.*;
import java.text.SimpleDateFormat;
import java.util.*; public class UseStream { public static void main(String[] args) {
// TODO 自动生成的方法存根
//构建Vector对象
Vector<String> v = new Vector<String>();
v.add("语文");
v.add("数学");
v.add("物理");
try
{
//文件处理对象
File f = new File("temp.txt");
FileOutputStream fOut = new FileOutputStream(f);
ObjectOutputStream objOut = new ObjectOutputStream(fOut);
//写入日期对象 objOut.writeObject(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()));
//写入Vector对象
objOut.writeObject(v);
objOut.close();
//构建readObj的实例
readObj rObj = new readObj();
//调用方法输出
rObj.readO();
}catch(IOException e)
{
System.out.println(e.getMessage());
}
}
};
//自定义类,实现读取对象并输出
class readObj extends Object
{
public void readO()
{
try
{
//文件处理对象
File f = new File("temp.txt");
FileInputStream fIn = new FileInputStream(f);
@SuppressWarnings("resource")
ObjectInputStream objIn = new ObjectInputStream(fIn);
//读取对象输出
Object ob1 = objIn.readObject();
System.out.println(ob1);
Object ob2 = objIn.readObject();
System.out.println(ob2);
}catch(IOException e){
System.out.println(e.getMessage());
}catch(ClassNotFoundException e){
System.out.println(e.getMessage());
}
}
}

Java—输入输出技术的更多相关文章

  1. Java输入输出技术

    输入输出分类     输入流,相对计算机来说是输入的,例如鼠标键盘操作,设备给计算机的信息     输出流,相对计算机来说是输出的,例如屏幕显示,计算机给设备的信息.   具体分类     基本流,I ...

  2. Java输入输出处理技术2

    7.从键盘输入 从键盘输入一行字符,并显示到屏幕上. package io; import java.io.*; public class ReadAndWrite { public static v ...

  3. Java数据库连接技术——JDBC

    大家好,今天我们学习了Java如何连接数据库.之前学过.net语言的数据库操作,感觉就是一通百通,大同小异. JDBC是Java数据库连接技术的简称,提供连接各种常用数据库的能力. JDBC API ...

  4. java 深入技术八(内省)

    1. javabean的软件设计思想 2.内省:封装了java反射,提供直接操作属性的Setter和getter方法的方法 3.核心API:BeanInfo java 的描述信息,Introspect ...

  5. (转)java缓存技术,记录

    http://blog.csdn.net/madun/article/details/8569860 最近再ITEYE上看到关于讨论JAVA缓存技术的帖子比较多,自己不懂,所以上网大概搜了下,找到一篇 ...

  6. paip.java 架构师之路以及java高级技术

    paip.java 架构师之路以及java高级技术 1.    Annotation 设计模式... 概念满天飞.ORM,IOC,AOP. Validator lambda4j memcache. 对 ...

  7. 深入分析Java Web技术内幕(修订版)

    阿里巴巴集团技术丛书 深入分析Java Web技术内幕(修订版)(阿里巴巴集团技术丛书.技术大牛范禹.玉伯.毕玄联合力荐!大型互联网公司开发应用实践!) 许令波 著   ISBN 978-7-121- ...

  8. Java序列化技术与Protobuff

    http://www.cnblogs.com/fangfan/p/4094175.html http://www.cnblogs.com/fangfan/p/4094175.html 前言: Java ...

  9. Java加密技术(一)——BASE64与单向加密算法MD5&SHA&MAC

    Java加密技术(一)——BASE64与单向加密算法MD5&SHA&MAC 博客分类: Java/Security Javabase64macmd5sha     加密解密,曾经是我一 ...

随机推荐

  1. 教你轻松计算AOE网关键路径(转)

    原文链接:http://blog.csdn.net/wang379275614/article/details/13990163 本次结合系统分析师-运筹方法-网络规划技术-关键路径章节,对原文链接描 ...

  2. Eclipse解决Ctrl+c很卡的方法

    问题如下 : 每当在eclipse中开发java项目打开jsp页面编辑的时候,按了ctrl+c就会卡死几秒的状态,一天经常这样会让人非常的烦躁. 解决方法如下: Eclipse -- Windows- ...

  3. mongoose操作汇总。嘻嘻

    MongoDb 命令查询所有数据库列表  CODE:  > show dbs 如果想查看当前连接在哪个数据库下面,可以直接输入db CODE:  > db  Admin 想切换到test数 ...

  4. Windows 版本的iTunes 修改iPhone的备份路径

    帮朋友解决修改iPhone的备份路径问题,故写篇博客整理记录一下. 所需工具 Junction工具 下载该工具然后将文件放到C:\Windows 目录下,如下图: 找到iTunes的备份路径 Wind ...

  5. android 触摸事件分析

    背景知识: 触摸屏可以有多个触控点 android中管理触控点通过一个数组来管理,涉及到index和id两个变量, index表示在数组中的下标,id表示这个触控点(pointer)的id,point ...

  6. TTradmin v1.1 - 免端口映射穿透任何内网、基于radmin核心的即时远程协助

        TTradmin 是一款免端口映射可直接穿透任何内网,基于radmin核心的即时远程协助软件.在使用的时候只需要保证“协助端”和“被协助端”使用同一个验证码即可实现安全便捷的远程控制,不需要进 ...

  7. 如何在RCP程序中添加一个banner栏

    前言:这段时间还算比较空闲,我准备把过去做过的有些形形色色,甚至有些奇怪的研究总结一下,也许刚好有人用的着也不一定,不枉为之抓耳挠腮的时光和浪费的电力.以前有个客户提出要在RCP程序中添加一个bann ...

  8. 【前端】Three.js

    Three.js 基本概念 渲染器(Renderer) 渲染器将和Canvas元素进行绑定 场景(Scene) 在Three.js中添加的物体都是添加到场景中的,因此它相当于一个大容器.一般说,场景里 ...

  9. Mybatis配置文件

    XML 映射配置文件 MyBatis 的配置文件包含了设置(settings)和属性(properties)信息. properties 这些属性都是可外部配置且可动态替换的,既可以在典型的 Java ...

  10. 24SQL

    create  or  replace  function f_op (p_n1  number , p_op  varchar2 , p_n2  number )  return  number a ...