IO篇二( IO典型的使用方法 thinking in java 4th 阅读笔记)
来源:互联网 发布:真空收纳袋 知乎 编辑:程序博客网 时间:2024/05/20 14:15
IO>6. I/O的典型使用方法:
6.1缓冲输入文件:
---------------------------------------------------------------------------------------------------------------------
public static String read(Stringfilename)throws IOException{
StringBuffer sb = new StringBuffer(1024);//默认16byte;
BufferedReader br = new BufferedReader(new FileReader(filename));
String br_temp = null;
while((br_temp=br.readLine())!=null){
sb.append(br_temp+"/n");
}
br.close();//重要,需要关闭流资源;
return sb.toString();
}
tip:
//补充: javac 命令的使用方法: javac ***.java -d . 如果不使用-d 则编译生成文件默认为当前目录;使用-d . 编译生成的
// class文件在以-d 参数 为开始生成class指定的包层次和文件;
// java 命令 如果生成的文件有包层次,需要在包层次的最上层调用java命令,并使用类名包含package路径的全称呼;
// 譬如: 对D:/BufferedInputFile.java 在D目录下执行javac命令
// javac BufferedInputFile.java -d . 则系统生成的class文件: D:/io/BufferedInputFile.class
// 执行时需在D:目录下 使用命令 java io.BufferedInputFile
tip2: // Eclipse中的相对路径.默认为根目录;
//System.out.println(read("./src/io/BufferedInputFile.java"));
//String filename =BufferedInputFile.class.getResource("BufferedInputFile.class").toString();
//System.out.println("BufferedInputFile");
//System.out.println(read(filename));
// 使用默认的javac编译和java执行可以得到正确的处理结构,也即java命令默认.执行命令的路径;
---------------------------------------------------------------------------------------------------------------------
6.2内存输入文件:
StringReader
---------------------------------------------------------------------------------------------------------------------
/**
* 从内存中的String串输入,从而创建一个StringReader;
* @author Administrator
*
*/
public classStringIOTest {
public static void main(String[] args)throwsException{
//将String类型转为StringReader中的流;
StringReader in = newStringReader(BufferedInputFile.read("./src/io/practices/StringIOTest.java"));
int c ;
while((c=in.read())!=-1){
System.out.print((char)c);
}
}
}
---------------------------------------------------------------------------------------------------------------------
6.3格式化的内存输入:
DataInputStream/DataOutputStream
---------------------------------------------------------------------------------------------------------------------
/**
* 格式化的内存输入,使用DataInputStream,因为面向字节,配合原始的输入流InputStream
* @author Administrator
*
*/
public class FormattedMemoryInput {
/**
* @param args
*/
public static void main(String[] args)throws IOException {
//DataInputStream in = newDataInputStream(newByteArrayInputStream(BufferedInputFile.read("./src/io/practices/FormattedMemoryInput.java").getBytes()));
DataInputStreamin = new DataInputStream(new FileInputStream("./src/io/practices/FormattedMemoryInput.java"));
//此处使用异常进行流程控制,通常认为是错误地使用异常的特性;
try{
while(true){
System.out.print((char)in.readByte());
}
}catch(EOFException e){
System.err.println("End ofStream");
}
//使用available,工作方式会随所读取的媒介类型的不同而有所不同,
// 字面意思是"在没有阻塞的情况下所能读取的字节数";
//对于文件,意味着整个文件;对于不同类型的流,可能就不是这样的,因此需要谨慎地使用;
in = new DataInputStream(new FileInputStream("./src/io/practices/FormattedMemoryInput.java"));
while(in.available()!=0){
System.out.print((char)in.readByte());
}
}
}
---------------------------------------------------------------------------------------------------------------------
6.4基本的文件输出:
PrintWriter(filename)或者 PrintWriter(BufferedWriter(FileWriter(file,true)))); 其中前一个是自动缓存的输出;后一个是手动缓冲,FileWriter传入的第二个参数是用来判定是否要在文件原来的基础上进行追加;
---------------------------------------------------------------------------------------------------------------------
/**
* 基本的文件输出;
* from Thinking in java 4th;
* @author Administrator
*
*/
public class BasicFileOutput {
static String file = "D:/BasicFileOutput.out";
/**
* @param args
*/
public static void main(String[] args)throws IOException {
long start = System.currentTimeMillis();
BufferedReader in = new BufferedReader(new FileReader("./src/io/practices/BasicFileOutput.java"));
PrintWriter pw = new PrintWriter(new BufferedWriter(new FileWriter(file,true)));
// PrintWriter out = new PrintWriter(file); 较为简洁的//PrintWriter调用法
int lineCount = 1;
String myline ;
while((myline=in.readLine())!=null){
pw.println((lineCount++)+":"+myline);
}
pw.close();
in.close();
System.out.println(BufferedInputFile.read(file));
long end = System.currentTimeMillis();
System.out.println(end-start);
}
}
---------------------------------------------------------------------------------------------------------------------
6.5 存储和恢复数据:
DataOutputStream/DataInputStream
---------------------------------------------------------------------------------------------------------------------
/**
* @param args
*/
public static void main(String[] args)throws IOException {
String filename = "D:/data.txt";
DataOutputStream dos = new DataOutputStream(new BufferedOutputStream(newFileOutputStream(filename)));
dos.writeDouble(3.14145926);
dos.writeUTF("This isPI");
dos.writeDouble(5.2554);
dos.writeUTF("这是我瞎定义的");
dos.close();
DataInputStream din = new DataInputStream(new BufferedInputStream(newFileInputStream(filename)));
System.out.println(din.readDouble());
System.out.println(din.readUTF());
System.out.println(din.readDouble());
System.out.println(din.readUTF());
}
6.6随机读写访问文件:
RandomAccessFile
---------------------------------------------------------------------------------------------------------------------
public classUsingRandomAccessFile {
static String file = "D:/rtest.dat";
static void display()throws IOException{
RandomAccessFile rf = new RandomAccessFile(file,"r");
for(int i=0;i<7;i++){
System.out.println("value"+i+":"+rf.readDouble());
}
System.out.println(rf.readUTF());
}
/**
* @param args
*/
public static void main(String[] args)throws IOException {
RandomAccessFile rf = new RandomAccessFile(file,"rw");
for(int i=0;i<7;i++){
rf.writeDouble(i*1.414);
}
rf.writeUTF("The end OfFile");
rf.close();
display();
System.out.println();
rf = new RandomAccessFile(file,"rw");
rf.seek(5*8);
rf.writeDouble(47.0001);
rf.close();
display();
}
}
---------------------------------------------------------------------------------------------------------------------
6.7管道流
PipedInputStream,PipedOutputStream,PipedReader和PipedWriter用于任务之间的通信,其意义在于多线程;
- IO篇二( IO典型的使用方法 thinking in java 4th 阅读笔记)
- IO 篇一 :理论篇 (java in thingking 4th阅读笔记)
- Thinking in Java阅读笔记(二)
- Thinking in Java 4th
- Thinking in Java 4th
- Thinking in Java 4th
- Thinking in Java 4th
- Thinking in Java 4th
- Thinking in Java 4th
- Thinking in Java 4th
- Thinking in Java(10)-Java IO
- thinking-in-java(18) java io
- Thinking in Java---Java IO 总结之基本IO
- 看Thinking in Java(4th)的艰难历程
- Java IO 的使用方法
- Thinking In Java 4th 十三章
- thinking in java 4th备忘
- Thinking in Java 4th 习题2.1
- IO 篇一 :理论篇 (java in thingking 4th阅读笔记)
- 不用sizeof来求出int的大小(程序)
- ASP.NET身份验证机制membership入门——配置篇(1)
- 易想商城(YX-SHOP )V4.7.1 过期解决方法,所有源代码(已破解)
- WPF4 多点触摸事件
- IO篇二( IO典型的使用方法 thinking in java 4th 阅读笔记)
- 关于各种无法解析的外部符号问题的相应解决方案
- printf,sscanf的用法及sscanf和sprintf的返回值的含义!
- SDL解析——五步棋
- 回车执行
- 获得Sql Server2000的字段注释
- 什么是Base64编码?
- VC6.0 Realse工程转换为debug工程
- 如何写出高效的PHP应用程序