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

【java编程】IO特殊类之RandomAccessFile实现多线程文件下载

2015-03-18 12:02 841 查看

RandomAccessFile特点:

1.它不是IO流的子类,而是直接继承至Object类。但内部实现的是DataInputStream和OutputStream来实现读写

2.从构造函数可以看出,此类只能操作文本文件

3.当文件存在时,再创建文件,会续写文件,而不是覆盖

4.当文件不存在,要创建文件时,只有文件权限为rw时,才能够创建文件

5.可以直接对基本数据类型进行读写

下面是一个文件多线程例子:

import java.io.*;
class RandomAccessFileDemo
{
public static void main(String[] args) throws IOException
{
//关联要存储的文件
RandomAccessFile ranf=new RandomAccessFile("ran.txt","rw");
//预留空间为1M
ranf.setLength(1024*1024);
//创建要写入的字符串
String s1="第一个字符串";
String s2="第二个字符串";
String s3="第三个字符串";
String s4="第四个字符串";
String s5="第五个字符串";
// 利用多线程同时写入一个文件
new WriteFileThread(1024*0,s1.getBytes()).start();//从文件的0字节之后开始写入数据
new WriteFileThread(1024*1,s2.getBytes()).start(); // 从文件的1024字节之后开始写入数据
new WriteFileThread(1024*2,s3.getBytes()).start(); // 从文件的2048字节之后开始写入数据
new WriteFileThread(1024*3,s4.getBytes()).start(); // 从文件的3072字节之后开始写入数据
new WriteFileThread(1024*4,s5.getBytes()).start(); // 从文件的4096字节之后开始写入数据
}
}
//创建类实现Thread,并对文件进行写入
class WriteFileThread extends Thread
{
private int skip;
private byte[] content;
WriteFileThread(int skip,byte[] content)
{
this.skip=skip;
this.content=content;
}
public void run()
{
RandomAccessFile ranf=null;
try
{
ranf=new RandomAccessFile("ran.txt","rw");
ranf.seek(skip);
ranf.write(content);

}
catch (IOException e)
{
throw new RuntimeException("文件不存在!");
}
finally
{
if(ranf!=null)
try
{
ranf.close();
}
catch (IOException e)
{
throw new RuntimeException("资源关闭失败!");
}

}

}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐