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

简谈 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);




              }



10739
.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.



构造方法有:
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  import file java class string api