今天贴一些有关于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){}
}
}
seek(long pos):设定读写指针的位置,与文件开头相隔pos个字节数
length():返回文件包含的字节数。
该类的构造函数有两个,一个是RandomAccessFile(File f,String mode);
另一个是RandomAccessFile(String name,String mode)//参数name是被访问的文件的路径。
mode只可以选值"r","rw",“r”表示程序仅仅是读文件,“rw”表示程序需要同时读写文件。此时要注意的是,RandomAccessFile类不支持只写文件的模式,因此把mode设置为"w"是非法的。