您的位置:首页 > 编程语言 > Java开发

Java标准I/O的概念

2014-04-07 00:15 197 查看
// 当程序读写文件时,在读写完毕后,就会及时关闭输入流和输出流,这些输入流和输出流对象的

// 生命周期是短暂的,不会存在于程序运行的整个生命周期中,对于某些应用程序,需要在程序运行

// 的整个生命周期中,从同一个数据源读入数据,或向同一个数据汇输出数据,最常见的就是一些日志

// 信息,以便用户能跟踪程序的运行状态

// 在JDK的java.lang.System类中,提供了三个静态变量:

// System.in,为InputStream类型,代表标准输入流,默认的数据源是键盘,程序可以通过System.in读取标准输入流的数据

// System.out,为printStream类型,代表标准输出流,默认的数据汇是控制台,程序可以通过System.out输出运行时的正常消息

// System.err,为printStream类型,代表标准错误输出流,默认的数据汇是控制台,程序可以通过System.err输出运行时的错误信息

// 以上三个是由java虚拟机创建的,存在于程序运行的整个生命周期中,这些流始终处于打开状态,除非程序显示的关闭他们,只要程序

// 没有关闭这些流,在程序运行的任何时候都可以通过他们来输入或输出数据

// 重新包装标准I/O

// System.in是InputStream类型,为了读取到格式化的数据,以及提高读数据的效率,需要对其进行包装,下面先用InputStreamReader适配器把System.in

// 转换为Reader类型,再用BufferedReader来装饰它。

// System.out是PrintStream类型,可以通过以下方式把它转换为PrintWriter类型 

// 标准I/O重定向

// 默认时,标准输入流从键盘读取数据,标准输出流和标准错误输出流向控制台输出数据,System类提供了一些用于重定向流的静态方法

// setIn(InputStream in);对标准输入流重定向

// setOut(PrintStream out);对标准输出流重定向

// setErr(printStream out);对标准错误输出流重定向

// 有时候程序向控制台输出大量数据,由于输出数据滚动太快,会影响阅读,此时可以把标准输出流重定向到一个文件

// PrintStream out = new PrintStream(new BufferedOutputStream(new FileOutputStream("D:\\out.txt")));

// 随机访问文件类:RandomAccessFile

// 无论是inputStream和OutputStream,还是Reader和Write,他们的共同点:只能按照数据的先后顺序读取数据源的数据,以及按照数据的先后顺序向数据汇写数据

// RandomAccessFile不属于流,它具有随机读写文件的功能,能从文件的任意位置开始执行读写操作,下面提供了定位文件位置的方法

// getFilePointer():返回当前读写指针所在的位置

// seek(long pos):设定读写指针的位置,与文件开头相隔pos个字节数

// skipBytes(int n):使读写指针从当前位置开始,跳过n个字节

// length():返回文件包含的字节数

// RandomAccessFile类实现了DataInput和DataOutput接口,因此能读写格式化数据,RandomAccessFile类提供了以下构造方法

// RandomAccessFile(File file,String mode);参数file指定被访问的文件

// RandomAccessFile(String name, String mode);参数name指定被访问的文件的路径
// 以上构造方法mode参数指定访问模式:可选值包括"r"和"rw",前者表示随机读模式,后者表示随机读写模式,注意:不支持只写文件模式,因此把mode设为"w"是非法的

public class Test19 {
public static void main(String[] args) throws Exception {
// InputStream inputStream = System.in;// 获取键盘输入的内容
// InputStreamReader reader = new InputStreamReader(inputStream);
// BufferedReader bufferedReader = new BufferedReader(reader);
// String data;
// while ((data = bufferedReader.readLine()) != null && data.length() != 0) {
// System.out.println("echo:" + data);
// }
// System.err.println("错误信息输出到控制台");
// System.out.println("普通信息输出到控制台");
// PrintWriter pw = new PrintWriter(System.out,true);
// pw.println("不爽");
// redirect();
RandomTest();
}

public static void redirect() throws Exception{
// 将所有的System.out信息输出到out.txt文件中
PrintStream out = new PrintStream(new BufferedOutputStream(new FileOutputStream("D:\\out.txt")));
System.setOut(out);
System.out.println("haha");
out.close();
// 再将System.out信息输出到默认的控制台
PrintStream pt = System.out;
System.setOut(pt);
System.out.println("gogo");
pt.close();
}

public static void RandomTest() throws Exception{
RandomAccessFile rf = new RandomAccessFile("D:\\test.dat", "rw");
for (int i = 0; i < 10; i++) {
rf.writeLong(i*1000);
}
rf.seek(5*8);//从文件开头开始,跳过5个long数据,接下来写第6个long数据,覆盖原来的第6个long数据
rf.writeLong(1234);

rf.seek(0);//把读指针定位到文件开头
for (int i = 0; i < 10; i++) {
System.out.println("Value"+i+":"+rf.readLong());
}
rf.close();
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  Java标准IO的概念