有关I/O流的一些小程序

今天贴一些有关于java I/O流的一些简单程序,方便大家理解和掌握,如果大家有什么不理解的,可以看我之前发过的有关I/O流的博客。

第一个(读写基本数据类型):

import java.io.*;
public class NumberExample
{  
   public static void main(String args[])
   { 
       int a1=12,a2=1180;
       long b=808080;
       float x1=3.14F,x2=12.456F;
       double d=1234.9876;
       boolean boo1=true,boo2=false;
       char c='我';
       File f=new File("D://a.txt");   //创建文件。
       try  
        {  
           FileOutputStream fos=new FileOutputStream("D://a.txt");         // 创建指向f文件输出流
           DataOutputStream out_data=new DataOutputStream(fos);    // 创建指向fos 的数据输出流
           out_data.writeInt(a1); // out_data将数据a1写入到文件
           out_data.writeInt(a2);  // out_data将数据a2写入到文件
           out_data.writeLong(b);      // out_data将数据b写入到文件
           out_data.writeFloat(x1);     // out_data将数据x1写入到文件
           out_data.writeFloat(x2);       // out_data将数据x2写入到文件
           out_data.writeDouble(d);         // out_data将数据d写入到文件
           out_data.writeBoolean(boo1);  // out_data将数据boo1写入到文件
           out_data.writeBoolean(boo2);  // out_data将数据boo2写入到文件
           out_data.writeChar(c); // out_data将数据c写入到文件
         } 
       catch(IOException e){
    	   System.out.print("wengjian");
       }
       try
         { 
            FileInputStream fis=new FileInputStream("D:\\a.txt");//【代码11】         // 创建指向f文件输入流
    DataInputStream in_data=new DataInputStream(fis); // 创建指向fis 的数据输入流
            System.out.println(in_data.readInt());// in_data读取int整数
            System.out.println(in_data.readInt()); // in_data读取int整数
            System.out.println(in_data.readLong());// in_data读取long整数
            System.out.println(in_data.readFloat());  // in_data读取float数
            System.out.println(in_data.readFloat());// in_data读取float数
            System.out.println(in_data.readDouble());// in_data读取double数
            System.out.println(in_data.readBoolean());// in_data读取boolean数据
            System.out.println(in_data.readBoolean());  // in_data读取boolean数据
            System.out.print(in_data.readChar());// in_data读取char数据
          } 
        catch(IOException e){System.out.print("duqu");}
   }
}

第二个(对象的读写):

import java.util.*;
import java.io.*;
public class ObjectExample
{ 
   public static void main(String args[ ])
   {  
      Calendar calendar1=Calendar.getInstance();    // 创建一个日历对象
      Calendar calendar2=Calendar.getInstance();    // 创建一个日历对象
      calendar1.set(1949,9,1);         // 将日历时间设置为1949年10月1日,注意9表示十月
      calendar2.set(2005,9,1);
      try
      {  
         File f=new File(“a.txt”);                 // 创建一个名字为"a.txt"的文件
         FileOutputStream  fileOut=new FileOutputStream(f);  // 创建指向文件f的文件输出流
         ObjectOutputStream objectOut=new ObjectOutputStream(fileOut);  // 创建指向文件fileOut的对象输出流
         objectOut.writeObject(calendar1);      // objectOut写对象calendar1到文件
         objectOut.writeObject(calendar2);       // objectOut写对象calendar2到文件
         FileInputStream fileIn=new FileInputStream(f);         // 创建指向文件f的文件输入流
         ObjectInputStream objectIn = new ObjectInputStream(fileIn);      // 创建指向文件fileIn 的对象输入流
         Calendar  cloneCalendar1=(Calendar) objectIn.readObject();    // objectIn读出对象
         Calendar  cloneCalendar2=(Calendar) objectIn.readObject();     // objectIn读出对象
         cloneCalendar1.setTime(new Date());
         cloneCalendar2.set(9999,9,1);
         int 年=calendar1.get(Calendar.YEAR),
            月=calendar1.get(Calendar.MONTH)+1,
            日=calendar1.get(Calendar.DAY_OF_MONTH);
         System.out.printf("\ncalendar1的日期:%d-%d-%d",年,月,日);
         年=calendar2.get(Calendar.YEAR);
         月=calendar2.get(Calendar.MONTH)+1;
         日=calendar2.get(Calendar.DAY_OF_MONTH);
         System.out.printf("\ncalendar2的日期:%d-%d-%d",年,月,日);
         年=cloneCalendar1.get(Calendar.YEAR);
         月=cloneCalendar1.get(Calendar.MONTH)+1;
         日=cloneCalendar1.get(Calendar.DAY_OF_MONTH);
         System.out.printf("\ncloneCalendar1的日期:%d-%d-%d",年,月,日);
         年=cloneCalendar2.get(Calendar.YEAR);
         月=cloneCalendar2.get(Calendar.MONTH)+1;
         日=cloneCalendar2.get(Calendar.DAY_OF_MONTH);
         System.out.printf("\ncloneCalendar2的日期:%d-%d-%d",年,月,日);
      
      }
      catch(Exception event)
      {  
         System.out.println(event);
      }
   }
}

第三个(针对RandomAccessFile):

import java.io.*;
public class RandomExample
{   
   public static void main(String args[])//你好!
    {  
       File f=new File("hello.txt");
       try{  
           RandomAccessFile random=new RandomAccessFile(f,”rw”);   // 创建指向文件f的random对象
          random.seek(0); // 将random的读取位置定位在文件内容的开始处
              long m=random.length();
              while(m>0)
              {
                  m=m-1;
                 random.seek(m);// 将random的读取位置定位在距文件开头m个字节
                  int c=random.readByte();
                  if(c<=255&&c>=0)
                  {
                     System.out.print((char)c);
                  } 
               else
                 {
                    m=m-1;
                   random.seek(m); // 将random的读取位置定位在距文件开头m个字节
                    byte cc[]=new byte[2];
                    random.readFully(cc);
                    System.out.print(new String(cc)); 
                 }
             }
           long  forthEndPosition=0;
           int forth=1;
           byte n=-1;
              while((random.read())!=-1&&(forth<=4))       // random读取一个字节的数据
                  { if(n=='\n')
                      { 
                        forthEndPosition=random.getFilePointer();
                        forth++;
                      }
                  }
              random.seek(m); // 将random的读取位置定位在文件内容的末尾
              long endPosition=random.getFilePointer(); // 获取当前random的读取位置
              long mark=endPosition;
              int j=1;
              while((mark>=0)&&(j<=6))  
                  { 
                     mark--;
                     random.seek(mark);
                     n=random.readByte();
                     if(n=='\n')
                      { 
                         endPosition=random.getFilePointer();
                         j++;
                      }
                  }
              random.seek(forthEndPosition);// 将random的读取位置定位在距文件开头forthEndPosition个字节处
              long startPoint=random.getFilePointer();
              while(startPoint<endPosition-1)
                   {
                     n=random.readByte();
                     System.out.print((char)n);
                     startPoint=random.getFilePointer();
                   }
            random.close();
       }
       catch(IOException ee){}
    }
}


有些人可能不太熟悉RandomAccessFile类,这是一个随机访问文件类,这个类不属于流,它具有随机读写文件的功能,能够从文件的任意位置开始执行读写操作,通过API大家可以查找到这个类中的一些方法,例如,getFilePointer():返回当前读写指针所处的位置

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

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

该类的构造函数有两个,一个是RandomAccessFile(File f,String mode);

另一个是RandomAccessFile(String name,String mode)//参数name是被访问的文件的路径。

mode只可以选值"r","rw",“r”表示程序仅仅是读文件,“rw”表示程序需要同时读写文件。此时要注意的是,RandomAccessFile类不支持只写文件的模式,因此把mode设置为"w"是非法的。

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值