国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

java io的一些總結(jié)

荊兆峰 / 1784人閱讀

摘要:類的使用該類默認(rèn)的寫操作是覆蓋操作。例如原來(lái)的文件內(nèi)容是,我們將文件指針移向位置,即覆蓋的位置在字符之后,我們寫入個(gè)字符文件就變成了。具體思路是將目標(biāo)文件分塊,每個(gè)線程負(fù)責(zé)寫入一個(gè)數(shù)據(jù)塊。因此,全部線程執(zhí)行完畢之后,文件的大小是。

RandomAccessFile類的使用

該類默認(rèn)的寫操作是覆蓋操作。例如原來(lái)的文件內(nèi)容是“abcde”,我們將文件指針移向2位置(seek(2),即覆蓋的位置在b字符之后),我們寫入3個(gè)字符:raf.write("xxx".getBytes());文件就變成了"abxxe"。如果我們要將xxx插入到b和c字符之間,默認(rèn)的RandomAccessFile是無(wú)法實(shí)現(xiàn)的

/**
 * 向文本文件的特定位置插入字符串
 */
public static void insertStringToTxtFile(File f,String content,int pos) throws IOException{
    
    RandomAccessFile raf = new RandomAccessFile(f, "rw");
    raf.seek(pos);
    
    // 暫存插入點(diǎn)后的字符串
    byte[] buf = new byte[1024];
    int len = 0;
    StringBuilder sb = new StringBuilder();
    while ((len = raf.read(buf)) != -1) {
        sb.append(new String(buf, 0, len));
    }
    
    // 此時(shí)FP已經(jīng)移動(dòng)到了EOF,需要重新回到插入點(diǎn)寫入字符串
    raf.seek(pos);
    raf.write(content.getBytes());
    raf.write(sb.toString().getBytes());
    raf.close();
    
}

以上的代碼中最關(guān)鍵的代碼是將文件指針之后的內(nèi)容暫存起來(lái),使用到了StringBuilder容器,讀取的時(shí)候采用的是讀取到字節(jié)數(shù)組(因?yàn)橐淮巫x取一行可能會(huì)產(chǎn)生換行的問(wèn)題)。

該類用于隨機(jī)讀取文件,利用該類我們可以實(shí)現(xiàn)多線程寫文件的操作。具體思路是將目標(biāo)文件分塊,每個(gè)線程負(fù)責(zé)寫入一個(gè)數(shù)據(jù)塊。例如:

public class WriteFile implements Runnable{

    private int block;                                // 數(shù)據(jù)塊標(biāo)號(hào)
    private File descFile;                            // 目標(biāo)文件
    private static final int SIZE_PER_BLOCK = 20;    // 每個(gè)數(shù)據(jù)塊大小
    
    public WriteFile(int block, File descFile) {
        super();
        this.block = block;
        this.descFile = descFile;
    }

    @Override
    public void run() {
        try {
            RandomAccessFile raf = new RandomAccessFile(descFile, "rw");
            raf.seek((block - 1) * SIZE_PER_BLOCK);
            raf.writeBytes("This is block " + block + "
");
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

}
public class MultipleThreadWrite {
    
    static File file = new File("data.txt");
    
    public static void main(String[] args) {
        
        for (int i = 1; i < 6; i++) {
            new Thread(new WriteFile(i, file)).start();
        }
    }

}

以上開啟了5個(gè)線程向data.txt文件中寫入數(shù)據(jù),每個(gè)線程負(fù)責(zé)寫入一個(gè)數(shù)據(jù)塊的數(shù)據(jù),我們要寫入的字符串的長(zhǎng)度是16個(gè)字節(jié),沒(méi)有完全占用1個(gè)數(shù)據(jù)塊,但是第二個(gè)線程寫入數(shù)據(jù)的時(shí)候?qū)⑽募羔樢苿?dòng)到了20,從20開始寫入,前面的4個(gè)字節(jié)是沒(méi)有數(shù)據(jù)的。因此,全部線程執(zhí)行完畢之后,文件的大小是 4 * 20 + 16 = 96bytes。

apache commons IO庫(kù)

maven依賴如下:


    commons-io
    commons-io
    2.4

常用方法如下:

@Test
public void testFileUtils() throws Exception{
    
    File file = new File("test.txt");

    // 將文本文件讀取為字符串
    String str = FileUtils.readFileToString(file, "utf-8");
    System.out.println("文本文件內(nèi)容:" + str);
    
    // 文件大小
    System.out.println(FileUtils.byteCountToDisplaySize(FileUtils.sizeOf(new File("F:/BaiduYunDownload/OS X Mavericks 10.9 (GM).iso"))));
    
    // 向文件中寫入字符串
    FileUtils.writeStringToFile(new File("data.txt"), "你好hellodfd#$", "utf-8");
    
    // 遍歷目錄及其子目錄下的所有文件
    Iterator iterator = FileUtils.iterateFilesAndDirs(new File("E:/tmp"), FileFileFilter.FILE, DirectoryFileFilter.DIRECTORY);
    while (iterator.hasNext()) {
        System.out.println(iterator.next());
        
    }
    
    // 文件拷貝
    File destFile = new File("test_copy.txt");
    FileUtils.copyFile(file, destFile);
    
    // 從URL(必須是file協(xié)議,即本地計(jì)算機(jī))中得到文件資源
    file = FileUtils.toFile(new URL("file:///E:/tmp/%E7%84%A6%E7%82%B9%E5%9B%BE.html"));
    System.out.println("本地文件:" + file);
    
    // 將文件拷貝到指定目錄(目錄不存在,創(chuàng)建之)
    FileUtils.copyFileToDirectory(file, new File("E:/tmp/demo"));
    
    // 拷貝一個(gè)目錄(及其文件和子目錄)到另一個(gè)目錄
    FileUtils.copyDirectoryToDirectory(new File("E:/tmp"), new File("E:/demo"));
    
    // 下載遠(yuǎn)程資源到本地
    FileUtils.copyURLToFile(new URL("http://www.knowsky.com/384261.html"), new File("tmp.html"), 3000, 3000);
    
    // 刪除目錄中的內(nèi)容
    FileUtils.deleteDirectory(new File("E:/demo"));
    
    // 移動(dòng)文件(rename)
    FileUtils.moveFile(new File("test.txt"), new File("ok.txt"));
    
}

commons io參考文檔

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://m.specialneedsforspecialkids.com/yun/64437.html

相關(guān)文章

  • 阿里之路+Java面經(jīng)考點(diǎn)

    摘要:我的是忙碌的一年,從年初備戰(zhàn)實(shí)習(xí)春招,年三十都在死磕源碼,三月份經(jīng)歷了阿里五次面試,四月順利收到實(shí)習(xí)。因?yàn)槲倚睦砗芮宄业哪繕?biāo)是阿里。所以在收到阿里之后的那晚,我重新規(guī)劃了接下來(lái)的學(xué)習(xí)計(jì)劃,將我的短期目標(biāo)更新成拿下阿里轉(zhuǎn)正。 我的2017是忙碌的一年,從年初備戰(zhàn)實(shí)習(xí)春招,年三十都在死磕JDK源碼,三月份經(jīng)歷了阿里五次面試,四月順利收到實(shí)習(xí)offer。然后五月懷著忐忑的心情開始了螞蟻金...

    姘擱『 評(píng)論0 收藏0
  • 少啰嗦!一分鐘帶你讀懂JavaNIO和經(jīng)典IO區(qū)別

    摘要:的選擇器允許單個(gè)線程監(jiān)視多個(gè)輸入通道。一旦執(zhí)行的線程已經(jīng)超過(guò)讀取代碼中的某個(gè)數(shù)據(jù)片段,該線程就不會(huì)在數(shù)據(jù)中向后移動(dòng)通常不會(huì)。 1、引言 很多初涉網(wǎng)絡(luò)編程的程序員,在研究Java NIO(即異步IO)和經(jīng)典IO(也就是常說(shuō)的阻塞式IO)的API時(shí),很快就會(huì)發(fā)現(xiàn)一個(gè)問(wèn)題:我什么時(shí)候應(yīng)該使用經(jīng)典IO,什么時(shí)候應(yīng)該使用NIO? 在本文中,將嘗試用簡(jiǎn)明扼要的文字,闡明Java NIO和經(jīng)典IO之...

    Meils 評(píng)論0 收藏0
  • Java知識(shí)點(diǎn)總結(jié)JavaIO-字節(jié)流)

    摘要:知識(shí)點(diǎn)總結(jié)字節(jié)流知識(shí)點(diǎn)總結(jié)字節(jié)流在程序中所有的數(shù)據(jù)都是以流的方式進(jìn)行傳輸或保存的,程序需要數(shù)據(jù)時(shí)要使用輸入流讀取數(shù)據(jù),而當(dāng)程序需要將一些數(shù)據(jù)保存起來(lái)時(shí),就要使用輸出流。字節(jié)流主要操作類型數(shù)據(jù),以數(shù)組為準(zhǔn),主要操作類是類和類。 Java知識(shí)點(diǎn)總結(jié)(JavaIO-字節(jié)流) @(Java知識(shí)點(diǎn)總結(jié))[Java, JavaIO] [toc] 字節(jié)流 在程序中所有的數(shù)據(jù)都是以流的方式進(jìn)行傳輸或保...

    BigTomato 評(píng)論0 收藏0
  • SegmentFault 技術(shù)周刊 Vol.40 - 2018,來(lái)學(xué)習(xí)一門新編程語(yǔ)言吧!

    摘要:入門,第一個(gè)這是一門很新的語(yǔ)言,年前后正式公布,算起來(lái)是比較年輕的編程語(yǔ)言了,更重要的是它是面向程序員的函數(shù)式編程語(yǔ)言,它的代碼運(yùn)行在之上。它通過(guò)編輯類工具,帶來(lái)了先進(jìn)的編輯體驗(yàn),增強(qiáng)了語(yǔ)言服務(wù)。 showImg(https://segmentfault.com/img/bV1xdq?w=900&h=385); 新的一年不知不覺已經(jīng)到來(lái)了,總結(jié)過(guò)去的 2017,相信小伙們一定有很多收獲...

    caspar 評(píng)論0 收藏0
  • SegmentFault 技術(shù)周刊 Vol.40 - 2018,來(lái)學(xué)習(xí)一門新編程語(yǔ)言吧!

    摘要:入門,第一個(gè)這是一門很新的語(yǔ)言,年前后正式公布,算起來(lái)是比較年輕的編程語(yǔ)言了,更重要的是它是面向程序員的函數(shù)式編程語(yǔ)言,它的代碼運(yùn)行在之上。它通過(guò)編輯類工具,帶來(lái)了先進(jìn)的編輯體驗(yàn),增強(qiáng)了語(yǔ)言服務(wù)。 showImg(https://segmentfault.com/img/bV1xdq?w=900&h=385); 新的一年不知不覺已經(jīng)到來(lái)了,總結(jié)過(guò)去的 2017,相信小伙們一定有很多收獲...

    nihao 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<