java中seek()的用法 50

 我来答
匿名用户
2013-05-08
展开全部

写段代码你看一下吧,用于从文件指定的位置开始读取,一般的下载工具都有断点续传功能,比如读取某个文件读取了一半,取消下载了,下次再下载的时候,从断点的位置继续下载,而不是重新下载文件,使用这个方法可以做到

public class Test2 {
    public static void main(String[] args) throws Exception {
        String filepath = "E:/test.exe";
        String outFile = "E:/copy.exe";
        long pos = firstRead(filepath, outFile);
        continueRead(filepath, outFile, pos);
    }
       
    /**
     * 第一次只读取文件的一半,到目标文件
     */
    public static long firstRead(String filepath, String out) throws Exception {
        RandomAccessFile file = new RandomAccessFile(filepath, "r");
        long fileLen = file.length();
           
        FileOutputStream outStream = new FileOutputStream(out);
        int sum = 0;  // 用于记录当前读取源文件的长度
        byte[] cache = new byte[1024];
        int len = -1;
        while ((len = file.read(cache)) != -1 && sum < fileLen/2) {
            outStream.write(cache, 0, len);
            sum += len;
        }
        outStream.close();
        file.close();
           
        return sum;   // 返回当前读取源文件的长度
    }
       
    /**
     * 从源文件指定位置继续读取文件内容,并输出到目标文件
     */
    public static void continueRead(String filepath, String out, long pos) throws Exception {
        RandomAccessFile file = new RandomAccessFile(filepath, "r");
        file.seek(pos);
           
        // 追加到目标文件中
        FileOutputStream outStream = new FileOutputStream(out, true);
        byte[] cache = new byte[1024];
        int len = -1;
        while ((len = file.read(cache)) != -1) {
            outStream.write(cache, 0, len);
        }
        outStream.close();
        file.close();
    }
}
随性亻
推荐于2017-09-30 · TA获得超过4180个赞
知道小有建树答主
回答量:4622
采纳率:84%
帮助的人:641万
展开全部
seek是从文件开头开始计算跳过的长度,skip是从当前指针所指向的位置开始计算的
比如文件内容为“12345”当前指向3
seek(2);则指向2
skip(2);则指向5

看过api后猜得~~
ps:我在1.5的api中只找到skipBytes(int n) 这个方法,没有skip()
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
养初厹06
2013-05-08 · TA获得超过203个赞
知道小有建树答主
回答量:784
采纳率:0%
帮助的人:416万
展开全部
io中的吧,设置开始读取位置
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
Camillesu
2013-05-08 · TA获得超过250个赞
知道小有建树答主
回答量:224
采纳率:0%
帮助的人:279万
展开全部
不同的类有不同的seek()方法。

用法都差不多,读取流文件。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
姒渁蓅姩畩舊
2013-08-23 · 超过41用户采纳过TA的回答
知道小有建树答主
回答量:129
采纳率:0%
帮助的人:90.5万
展开全部
java.io.RandomAccessFile //
javax.imageio.stream.FileImageOutputStream //
javax.imageio.stream.FileCacheImageOutputStream //
javax.imageio.stream.ImageInputStreamImpl //
and so on ............
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(4)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式