使用RandomAccessFile讀寫資料
------------siwuxie095
工程名:TestRandomAccessFile
包名:com.siwuxie095.file
類名:MultiWriteFile.java(主類)、WriteFile.java
工程結構目錄如下:
WriteFile.java:
package com.siwuxie095.file; import java.io.File; import java.io.FileNotFoundException; import java.io.IOException; import java.io.RandomAccessFile; //WriteFile繼承自 Thread,作為一個執行緒 //RandomAccessFile: //在寫入時,可以為每一個執行緒指定一個固定的寫入區域, //這可以用於多執行緒的下載,以及多執行緒的檔案傳輸 //在讀取時,也可以指定RandomAccessFile來讀取檔案中的特定內容 public class WriteFileextends Thread { //宣告三個本地變數 File file; int block; int L=100; /** *如:將一個檔案均勻劃分成 5個區域,每一個區域都是一個塊 block, *每個block的長度設為100位元組 *構造方法中傳入的block數值是幾,就從哪個塊開始讀寫 * * 1 2 3 4 5 * |---------|---------|---------|---------|---------| * 0xL 1xL 2xL * * @param f * @param b */ //先為執行緒建立一個構造方法,傳入兩個引數 //一個是要寫的檔案,另一個是當前執行緒所負責的寫入檔案的區塊 public WriteFile(File f,int b) { this.file=f; this.block=b; } //在當前類中覆蓋 Thread 的 run()方法,並重寫 @Override publicvoid run() { try { //建立一個 RandomAccessFile 隨機讀寫檔案,並指定操作的檔案物件和操作模式 //操作模式有4種:(一般情況下都使用 rw) //(1)r只讀 //(2)rw可讀可寫 //(3)rws可讀可寫,還要求對"檔案的內容"或"元資料"的每個更新都同步寫入到基礎儲存裝置 //(4)rwd可讀可寫,還要求對"檔案的內容"的每個更新都同步寫入到基礎儲存裝置 //有異常丟擲,需要用 try catch 捕獲 RandomAccessFile raf=new RandomAccessFile(file,"rw"); //通過隨機讀寫檔案,可以讀取到或寫入到當前檔案的任何一個位置 /*如:一個檔案物件,有頭和尾,中間是檔案內容 * *如果想從(1)處寫入檔案資料,可以將 RandomAccessFile 的指標移動到(1)處, *直接開始寫入,以後的資料依次從(1)處向後寫入 * *如果想從(2)處寫入3個加號,同理,3個加號就出現在(2)處 * *如果想從某個位置讀取資料,同樣要移動檔案的指標到該位置, *然後開始讀取相應數量的資料 * * (1) (2) * |*** |+++ * |------***-----------+++--------------------| *檔案頭 檔案尾 */ //呼叫 RandomAccessFile 的 seek()方法設定檔案的指標 //通過檔案自身的指標,設定讀取或寫入的偏移量, //然後指標自動向後偏移。 //對於每一個檔案,根據傳入的block值來確定讀寫的位置 //block是從1開始的,但檔案的指標是從0開始的 //使用(block-1)*L //這樣就將檔案的指標指定到當前執行緒所負責的區域的頭部 raf.seek((block-1)*L); //呼叫 writeBytes() 方法寫入檔案:傳入字串,會自動 //將字串轉換成位元組寫入到檔案當中 //這裡的 block 雖然是整型,但會自動轉換為String raf.writeBytes("This is block "+block); //再輸出20個短橫 for (int i =0; i < 20; i++) { raf.writeBytes("-"); } //關閉RandomAccessFile raf.close(); }catch (FileNotFoundException e) { e.printStackTrace(); }catch (IOException e) { e.printStackTrace(); } } } |
MultiWriteFile.java:
package com.siwuxie095.file; import java.io.File; import java.io.FileNotFoundException; import java.io.IOException; import java.io.RandomAccessFile; public class MultiWriteFile { //先在主類中建立一個靜態檔案物件,使用相對路徑 static File file=new File("test.txt"); public staticvoid main(String[] args) { //判斷檔案是否存在 if (file.exists()) { //如果存在就先將檔案刪除掉,保證每次寫入,當前檔案都是一個新檔案 //不會被之前的檔案版本所影響 //這裡不必擔心當前的執行緒無法向該檔案寫入資料 //因為在 RandomAccessFile 寫入檔案時,檔案不存在,它會自動把檔案創建出來 file.delete(); } //寫入檔案: //建立WriteFile,指定不同執行緒寫入不同的區塊,並開啟執行緒 //寫入檔案的順序與執行緒的先後建立順序無關,嚴格按照指定的區塊去寫 new WriteFile(file,5).start(); new WriteFile(file,3).start(); new WriteFile(file,1).start(); new WriteFile(file,4).start(); new WriteFile(file,2).start(); try { //讀取檔案: RandomAccessFile raf=new RandomAccessFile(file,"r"); //這裡要讀取第5個區塊,即指標從400開始 raf.seek(400); //呼叫 read()方法時要傳入一個位元組型的陣列,並指定讀取的長度 byte input[]=newbyte[20]; raf.read(input); //建立String,傳入位元組型陣列input String inputString=new String(input); System.out.println(inputString); raf.close(); }catch (FileNotFoundException e) { e.printStackTrace(); }catch (IOException e) { e.printStackTrace(); } } } |
執行一覽:
讀取第 5個區塊的 20個位元組:
test.txt 的內容:
test.txt 共 435 位元組:4x100+35
(最後35個位元組即 This is block 5--------------------)
執行後,工程結構目錄一覽:
【made by siwuxie095】
相關推薦
使用RandomAccessFile讀寫資料
------------siwuxie095 工程名:TestRandomAccessFile 包名:com.siwuxie095.file 類名:MultiWriteFile.java(
golang 從opentsdb 讀寫資料
package main import ( "bufio" "bytes" "encoding/json" "fmt" "io/ioutil" "log" "net" "net/http" "runtime"
用json讀寫資料
''' import json filename='username1.json' try: with open(filename) as f_obj: username=json.load(f_obj) except FileNotFoundError:
Jmeter Redis外掛開發 -- 讀寫資料
大神的原文地址 背景 最近一段時間在接觸效能壓測,遇到一個棘手的問題。效能需求在30KQPS,要求進行單介面壓測,介面之間依賴不可避免(下一個介面發壓資料需要使用上一介面的返回),還不能通過做資料的方式準備。只能將上一介面返回的資料,儲存起來,用於下一介面的引數。 在一開始的時候,犯了一
Python使用xlrd和xlwt向Excel讀寫資料
一、從Excel讀資料 下圖是我的url.xlsx內容,此處我以讀取B列(即第2列)URL資料為例 import xlrd data = xlrd.open_workbook('C:\\Users\\Administrator\\Desktop\\url.xlsx') #開啟工
tensorflow-讀寫資料tf.data(1)
模組:tf.data定義在tensorflow/_api/v1/data/init.py輸入管道的tf.data.Dataset API 模組實驗模組:構建輸入管道的實驗API。類class Dataset:可能是大型的元素集。class FixedLengthRecordDataset: 來自一個或多個二進
tensorflow-讀寫資料tf.data(2)
從簡單的、可重用的部分構建複雜的輸入管道。 例如,影象模型的管道可以聚合分散式檔案系統中檔案中的資料,對每個影象應用隨機擾動,並將隨機選擇的影象合併成一批進行訓練。文字模型的管道可能包括從原始文字資料中提取符號,將它們轉換為嵌入查詢表的識別符號,以及將不同長度的序列批處理在一起。 tf.data API使
Linux Kernel 裝置驅動之I2C之client讀寫資料API
傳送資料 int i2c_master_send(const struct i2c_client *client, const char *buf, int count) 接收資料 int i2c_master_recv(const struct i2c_client *c
hbase 讀寫資料流程----文字簡介
hbase讀取資料流程 0、client發出請求 1、訪問zk 2、zookeeper返回-ROOT-表所在的資訊,返回的是位置資訊 -ROOT-表中儲存了.META表的元資料資訊 .META表儲存了Region的元資料 -ROOT-:只對應一個region,不能切分,通過-ROOT-表可以
Java使用RandomAccessFile讀寫檔案
Java RandomAccessFile RandomAccessFile是用來訪問那些儲存資料記錄的檔案的,你就可以用seek( )方法來訪問記錄,並進行讀寫了。這些記錄的大小不必相同;但是其大小和位置必須是可知的。但是該類僅限於操作檔案。 Ra
tensorflow-讀寫資料最佳程式碼組合方式
最佳組合程式碼模式為: # Create the graph, etc. init_op = tf.global_variables_initializer() # Create a session for running operations in the Graph. sess = tf.Sessio
[原始碼和文件分享]程式設計實現對硬碟全盤資料進行讀寫資料擦除
背景 在 XP 系統下下,我們可以直接呼叫 WirteFile 函式對磁碟寫入資料,但到了 Windows 7 以及 Windows 7 版本以上的系統,就已經開始變得不那麼簡單了。 在 Windows 7 及以上版本中,對檔案系統和儲存堆疊進行的更改,限制對磁碟和卷的直接訪問,但是,在以下
java讀寫資料總結
對於資料的讀寫java提供了專門的讀寫流DataInputStream和DataOutputStream形式進行讀寫,可以進行各種基本資料型別和字串以及UTF格式的陣列或者單個元素的讀寫。 ------------------------------------------
在安卓系統中讀寫資料
0.安卓儲存空間: 目錄結構在FileExplorer中檢視,可通過Windows/Show View/Others/FileExplorer開啟 內部儲存空間(internal storage):自帶的,必須有的 RAM記憶體:執行記憶體(電腦記憶體) ROM記憶體:儲存空間(電腦
C語言隨機讀寫資料檔案(二)
int fseek(FILE * fp, long offset, int fromWhere):設定檔案位置標記,方法引數說明: fp:FILE型別指標,該指標對應的檔案即是檔案位置標記所標記的檔案; offset:偏移量; fromWhere:偏移起始點,其值可以為SEEK_SET、SEEK
C語言隨機讀寫資料檔案(一)
void rewind(FILE * fp):將檔案位置標記重新指向檔案開頭,該函式沒有返回值; 【例子】計算機D盤根目錄有一個存放學生資訊的stud.dat檔案,請先講檔案資訊顯示在控制檯,然後在將資料複製到F盤stud.dat檔案中。 #include <stdio.h> #
如何往伺服器中讀寫資料?
本次專案,我用apache-tomcat將自己的計算機弄成了一個小伺服器,然後對裡面的jsp型別的檔案進行讀寫。 首先,如何弄伺服器呢?工程檔案:點選開啟連結 1.下載一個apache-tomcat,這裡我給大家提供一個apache-tomcat-6.0.37的下載地址:點
RandomAccessFile讀寫檔案字元
我本來寫了個可以存入資訊的地址簿,使用RandomAccessFile類來隨機讀寫.當然可以使用GUI檢視.反正說也說不清了.我就直接說下下面的一個測試程式來說明我的問題: Java code ? 1 2 3 4 5 6 7 8 9 10 11
RandomAccessFile 讀寫檔案內容,去除亂碼
一、開發過程中遇到問題: (1)檔案內容只能等長替換,如果檔案內容少了就會亂行。 解決辦法:我主要是進行xml檔案內容解析的,用新增隨機字串的方式進行了解決,這樣既不影響檔案內容解析,也把問題解決了。 二、程式碼: public class FileUtils {
stm32 備份暫存器 讀寫資料
1. 首先 檢查RTC電池是否裝載,沒電池的話,裝置掉電也儲存不了資料。 備份暫存器就是普通的RAM,需要配合外接電池使用,如果沒有電池,就不能掉電保持資料。 因為是普通RAM,所以不存在寫入次數的問題,理論上是無限次的。 其次在RCC_Configuration();