简谈 FileInputStream 和 FileOutputStream 的使用方法
2007-02-05 15:52
447 查看
对文件的读写操作一直是我的薄弱环节,这都是错误的学习习惯导致的:每门课程我都是开始时学得蛮认真的,所以基础相对比较扎实一点;但是到后来就越学越放松,所以后面的一块就变得模模糊糊的,而Java课程中的I/O也是放在靠后的位置来介绍的,所以这一块学得不咋的。。。
今天上午又在看《IvorHorton’sBeginningJava2,JDK5Edition》(《Java2入门经典》),写了几个例题。
首先看看API中是怎么描述FileInputStream的:
public class FileInputStreamextends InputStreamFileInputStream 从文件系统中的某个文件中获取输入字节。哪些文件可用取决于主机环境。
FileInputStream 用于读取诸如图像数据之类的原始字节流。要读取字符流,请考虑使用 FileReader。
FileInputStream(File file) :通过打开一个到实际文件的连接来创建一个 FileInputStream,该文件通过文件系统中的 File 对象 file 指定。
FileInputStream(FileDescriptor fdObj):通过使用文件描述符 fdObj 创建一个 FileInputStream,该文件描述符表示到文件系统中某个实际文件的现有连接。
FileInputStream(String name):通过打开一个到实际文件的连接来创建一个 FileInputStream,该文件通过文件系统中的路径名 name 指定。
下面这个例题是使用通道将字符串写入文件的
package com.bulaoge.alenc;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.FileNotFoundException;
import java.nio.ByteBuffer;
import java.nio.channels.FileChannel;
/**
* @title WriteAString.java
* @author Alenc
*/
public class WriteAString ...{
public static void main(String[] args) ...{
String phrase = new String("Garbage in, Garbage out");
String dirname = "C:/";
String filename = "out.txt";
File dir = new File(dirname);
//check out the directory
if(!dir.exists())...{
if(!dir.mkdir())...{
System.out.println("Cannot creat directory: " + dirname);
System.exit(1);
}
} else if(!dir.isDirectory()) ...{
System.out.println(dirname + " is not a director");
System.exit(1);
}
//creat the filestream
File aFile = new File(dir, filename);
FileOutputStream outputFile = null;
try ...{
outputFile = new FileOutputStream(aFile);
System.out.println("File stream created successfully.");
} catch(FileNotFoundException e) ...{
e.printStackTrace(System.err);
}
.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif"border="0">
//creat the file output stream channel and the buffer
FileChannel outChannel = outputFile.getChannel();
ByteBuffer buf = ByteBuffer.allocate(1024);
System.out.println("New buffer: position = " + buf.position() +
"Limit = " + buf.limit() + "capacity = " +
buf.capacity());
// /**
// * This code can be only compile under JDK1.5
// */
// for(char ch : phrase.toCharArray()) {
// buf.putChar(ch);
// }
char[] ch = phrase.toCharArray();
for(int j=0; j<ch.length; j++) ...{
buf.putChar(ch[j]);
}
System.out.println("Buffer after loading: postion = " + buf.position()
+ "Limit = " + buf.limit() + "capacity = "
+ buf.capacity());
buf.flip();
System.out.println("Buffer after flip: position = " + buf.position()
+ "Limit = " + buf.limit() + "capacity = "
+ buf.capacity());
//write the file
try...{
outChannel.write(buf);
outputFile.close();
System.out.println("Buffer contents written to file.");
} catch(IOException e) ...{
e.printStackTrace(System.err);
}
System.exit(0);
}
}
编译后运行程序会得到如下的结果:
C:study>java -ea -cp . WriteAString
File stream created successfully.
New buffer: position = 0 Limit = 1024 capacity = 1024
Buffer after loading: postion = 116 Limit = 1024 capacity = 1024
Buffer after flip: position = 0 Limit = 116 capacity = 1024
Buffer contents written to file.
此时,在目录C:/会有一个文本文件out.txt,就是该程序写到磁盘上的
out.txt文件中包含如下文字:
G a r b a g e i n , G a r b a g e o u t . I t s j u s t a t e s t o f m y f a v o r J a v a
显示的字符之间出现空格,是因为输出的是8位的字符,而写入文件的时Unicode字符码。对于Unicode字符码来说,字符串每个字符占用两个字节。
下面再看看API中是怎么描述FileReadStream的:
构造方法有:
public class FileOutputStreamextends OutputStream文件输出流是用于将数据写入 File 或 FileDescriptor 的输出流。文件是否可用或能否可以被创建取决于基础平台。特别是某些平台一次只允许一个 FileOutputStream(或其他文件写入对象)打开文件进行写入。在这种情况下,如果所涉及的文件已经打开,则此类中的构造方法将失败。
FileOutputStream 用于写入诸如图像数据之类的原始字节的流。要写入字符流,请考虑使用 FileWriter。
FileOutputStream(File file):创建一个向指定 File 对象表示的文件中写入数据的文件输出流。
FileOutputStream(File file, boolean append) :创建一个向指定 File 对象表示的文件中写入数据的文件输出流。
FileOutputStream(FileDescriptor fdObj) :创建一个向指定文件描述符处写入数据的输出文件流,该文件描述符表示一个到文件系统中的某个实际文件的现有连接。
FileOutputStream(String name) :创建一个向具有指定名称的文件中写入数据的输出文件流。
FileOutputStream(String name, boolean append) :创建一个向具有指定 name 的文件中写入数据的输出文件流。
下面再写一个读取刚刚创建的out.txt文件的程序:
编译后运行程序会得到如下的结果:
C:study>javac -classpath . ReadAString.java
C:study>java -enableassertions -classpath . ReadAString
File contains 116 bytes.
String read: Garbage in, Garbage out.
String read: Its just a test of my f
String read: avor Java
EOF reached.
构造方法有:
相关文章推荐
- 使用FileInputStream的available方法,导致读取的文件流为0
- FileOutputStream和FileInputStream使用方法说明
- FileOutputStream和FileInputStream使用方法说明
- 概述:本文详细介绍了DevExpress中的lookupedit的使用方法。
- Axure chrome 扩展显示已损坏的解决方法 写在前面的话: 之前用的好好的Axure chrome 扩展如今却并不能使用,一直说扩展已损坏,额,上网下了几个.crx文件都没有用……
- Linux挂接命令(mount)的使用方法
- android使用notifyDataSetChanged()方法,adapter的数据更新了,但是ListView的内容没有更新;
- Alexa工具条正确安装方法 Alexa工具条正确使用方法 Alexa工具条正确应用
- ArrayList的使用方法【转载】
- Android使用 httpClient取消http请求的方法
- 使用synchronized实现同步方法
- TotoiseSVN的基本使用方法
- OC中字符串的使用方法
- ngrep 安装及使用方法
- JNDI的使用方法及实例
- VC6中使用COM库的三种方法
- 中文文本分词,关键词提取工具jcseg使用方法
- LISTBOX控件:vc修改列表框LISTBOX的背景颜色及字体颜色及其使用方法
- [转][JavaScript]使用jquery插件报错:$.browser is undefined的解决方法
- 使用Setup Factory修改Path变量的方法