java filechannel api_FileChannel
方法詳細信息
open public static?FileChannel?open?(Path?path,
Set extends OpenOption>?options,
FileAttribute>...?attrs)
throws IOException
打開或創(chuàng)建文件,返回文件通道以訪問該文件。
options參數(shù)確定文件的打開方式。 READ和WRITE選項確定是否應(yīng)打開文件以進行讀取和/或?qū)懭搿?如果數(shù)組中都沒有包含任何選項(或APPEND選項),則打開文件進行讀取。 默認情況下,在文件開頭處開始讀取或?qū)懭搿?/p>
除了READ和WRITE ,還可能出現(xiàn)以下選項:
additional options Option Description APPEND If this option is present then the file is opened for writing and each invocation of the channel's write method first advances the position to the end of the file and then writes the requested data. Whether the advancement of the position and the writing of the data are done in a single atomic operation is system-dependent and therefore unspecified. This option may not be used in conjunction with the READ or TRUNCATE_EXISTING options. TRUNCATE_EXISTING If this option is present then the existing file is truncated to a size of 0 bytes. This option is ignored when the file is opened only for reading. CREATE_NEW If this option is present then a new file is created, failing if the file already exists. When creating a file the check for the existence of the file and the creation of the file if it does not exist is atomic with respect to other file system operations. This option is ignored when the file is opened only for reading. CREATE If this option is present then an existing file is opened if it exists, otherwise a new file is created. When creating a file the check for the existence of the file and the creation of the file if it does not exist is atomic with respect to other file system operations. This option is ignored if the CREATE_NEW option is also present or the file is opened only for reading. DELETE_ON_CLOSE When this option is present then the implementation makes a best effort attempt to delete the file when closed by the close method. If the close method is not invoked then a best effort attempt is made to delete the file when the Java virtual machine terminates. SPARSE When creating a new file this option is a hint that the new file will be sparse. This option is ignored when not creating a new file. SYNC Requires that every update to the file's content or metadata be written synchronously to the underlying storage device. (see Synchronized I/O file integrity). DSYNC Requires that every update to the file's content be written synchronously to the underlying storage device. (see Synchronized I/O file integrity).
實現(xiàn)還可以支持其他選項。
attrs參數(shù)是文件file-attributes的可選數(shù)組,用于在創(chuàng)建文件時以原子方式設(shè)置。
新的信道是通過調(diào)用創(chuàng)建newFileChannel上創(chuàng)建該提供商方法Path 。
參數(shù)
path - 要打開或創(chuàng)建的文件的路徑
options - 指定文件打開方式的選項
attrs - 創(chuàng)建文件時要自動設(shè)置的文件屬性的可選列表
結(jié)果
一個新的文件通道
異常
path與不支持創(chuàng)建文件通道的提供程序關(guān)聯(lián),或者指定了不支持的打開選項,或者該數(shù)組包含在創(chuàng)建文件時無法原子設(shè)置的屬性
對于默認提供程序,如果打開文件進行讀取,則調(diào)用SecurityManager.checkRead(String)方法來檢查讀取訪問權(quán)限。
從以下版本開始:
1.7
open public static?FileChannel?open?(Path?path,
OpenOption...?options)
throws IOException
打開或創(chuàng)建文件,返回文件通道以訪問該文件。
調(diào)用此方法的行為與調(diào)用完全相同
fc.open(file, opts, new FileAttribute>[0]);
其中opts是options數(shù)組中指定的一組選項。
參數(shù)
path - 要打開或創(chuàng)建的文件的路徑
options - 指定文件打開方式的選項
結(jié)果
一個新的文件通道
異常
path與不支持創(chuàng)建文件通道的提供程序關(guān)聯(lián),或者指定了不支持的打開選項
對于默認提供程序,如果打開文件進行讀取,則調(diào)用SecurityManager.checkRead(String)方法來檢查讀取訪問權(quán)限。
從以下版本開始:
1.7
read public abstract?int?read?(ByteBuffer?dst)
throws IOException
從該通道讀取一個字節(jié)序列到給定的緩沖區(qū)。
從該通道的當前文件位置開始讀取字節(jié),然后使用實際讀取的字節(jié)數(shù)更新文件位置。
Specified by:
Specified by:
參數(shù)
dst - 要傳輸字節(jié)的緩沖區(qū)
結(jié)果
如果通道已到達流末尾,則讀取的字節(jié)數(shù)(可能為零)或
-1
異常
read public abstract?long?read?(ByteBuffer[]?dsts,
int?offset,
int?length)
throws IOException
從該通道讀取一系列字節(jié)到給定緩沖區(qū)的子序列。
從該通道的當前文件位置開始讀取字節(jié),然后使用實際讀取的字節(jié)數(shù)更新文件位置。
Specified by:
參數(shù)
dsts - 要傳輸字節(jié)的緩沖區(qū)
offset - 要傳輸字節(jié)的第一個緩沖區(qū)的緩沖區(qū)數(shù)組內(nèi)的偏移量;
必須是非負數(shù)且不大于dsts.length
length - 要訪問的最大緩沖區(qū)數(shù);
必須是非負數(shù)且不大于dsts.length - offset
結(jié)果
如果通道已到達流末尾,則讀取的字節(jié)數(shù)(可能為零)或
-1
異常
read public final?long?read?(ByteBuffer[]?dsts)
throws IOException
從該通道讀取一系列字節(jié)到給定的緩沖區(qū)。
從該通道的當前文件位置開始讀取字節(jié),然后使用實際讀取的字節(jié)數(shù)更新文件位置。
Specified by:
參數(shù)
dsts - 要傳輸字節(jié)的緩沖區(qū)
結(jié)果
如果通道已到達流末尾,則讀取的字節(jié)數(shù)(可能為零)或
-1
異常
write public abstract?int?write?(ByteBuffer?src)
throws IOException
從給定緩沖區(qū)向該通道寫入一個字節(jié)序列。
除非通道處于附加模式,否則從該通道的當前文件位置開始寫入字節(jié),在這種情況下,位置首先前進到文件的末尾。 如有必要,文件將生長以容納寫入的字節(jié),然后使用實際寫入的字節(jié)數(shù)更新文件位置。
Specified by:
Specified by:
參數(shù)
src - 要從中檢索字節(jié)的緩沖區(qū)
結(jié)果
寫入的字節(jié)數(shù),可能為零
異常
write public abstract?long?write?(ByteBuffer[]?srcs,
int?offset,
int?length)
throws IOException
從給定緩沖區(qū)的子序列向該通道寫入一個字節(jié)序列。
除非通道處于附加模式,否則從該通道的當前文件位置開始寫入字節(jié),在這種情況下,位置首先前進到文件的末尾。 如有必要,文件將生長以容納寫入的字節(jié),然后使用實際寫入的字節(jié)數(shù)更新文件位置。
Specified by:
參數(shù)
srcs - 要從中檢索字節(jié)的緩沖區(qū)
offset - 要從中檢索字節(jié)的第一個緩沖區(qū)的緩沖區(qū)數(shù)組中的偏移量;
必須是非負數(shù)且不大于srcs.length
length - 要訪問的最大緩沖區(qū)數(shù);
必須是非負數(shù)且不大于srcs.length - offset
結(jié)果
寫入的字節(jié)數(shù),可能為零
異常
write public final?long?write?(ByteBuffer[]?srcs)
throws IOException
從給定的緩沖區(qū)向該通道寫入一個字節(jié)序列。
除非通道處于附加模式,否則從該通道的當前文件位置開始寫入字節(jié),在這種情況下,位置首先前進到文件的末尾。 如有必要,文件將生長以容納寫入的字節(jié),然后使用實際寫入的字節(jié)數(shù)更新文件位置。
Specified by:
參數(shù)
srcs - 要從中檢索字節(jié)的緩沖區(qū)
結(jié)果
寫入的字節(jié)數(shù),可能為零
異常
position public abstract?long?position()
throws IOException
返回此通道的文件位置。
Specified by:
結(jié)果
此通道的文件位置,一個非負整數(shù),計算從文件開頭到當前位置的字節(jié)數(shù)
異常
position public abstract?FileChannel?position?(long?newPosition)
throws IOException
設(shè)置此通道的文件位置。
將位置設(shè)置為大于文件當前大小的值是合法的,但不會更改文件的大小。 稍后嘗試在這樣的位置讀取字節(jié)將立即返回文件結(jié)束指示。 稍后嘗試在這樣的位置寫入字節(jié)將導(dǎo)致文件增長以容納新字節(jié); 未指定前一個文件結(jié)尾和新寫入字節(jié)之間的任何字節(jié)的值。
Specified by:
參數(shù)
newPosition - 新位置,一個非負整數(shù),用于計算文件開頭的字節(jié)數(shù)
結(jié)果
這個文件頻道
異常
size public abstract?long?size()
throws IOException
返回此通道文件的當前大小。
Specified by:
結(jié)果
此通道文件的當前大小,以字節(jié)為單位
異常
truncate public abstract?FileChannel?truncate?(long?size)
throws IOException
將此頻道的文件截斷為給定大小。
如果給定大小小于文件的當前大小,則文件將被截斷,丟棄文件新端之外的任何字節(jié)。 如果給定大小大于或等于文件的當前大小,則不修改該文件。 在任何一種情況下,如果此通道的文件位置大于給定大小,則將其設(shè)置為該大小。
force public abstract?void?force?(boolean?metaData)
throws IOException
強制將此通道文件的任何更新寫入包含它的存儲設(shè)備。
如果此通道的文件駐留在本地存儲設(shè)備上,則當此方法返回時,保證自創(chuàng)建此通道以來對文件所做的所有更改,或者自上次調(diào)用此方法以來,該文件都將寫入該設(shè)備。 這對于確保在系統(tǒng)崩潰時不會丟失關(guān)鍵信息非常有用。
如果文件不駐留在本地設(shè)備上,則不會進行此類保證。
metaData參數(shù)可用于限制此方法需要執(zhí)行的I / O操作數(shù)。 為此參數(shù)傳遞false表示只需要將文件內(nèi)容的更新寫入存儲; 傳遞true表示必須寫入文件內(nèi)容和元數(shù)據(jù)的更新,這通常需要至少一次I / O操作。 此參數(shù)是否實際具有任何效果取決于底層操作系統(tǒng),因此未指定。
即使僅打開通道進行讀取,調(diào)用此方法也可能導(dǎo)致I / O操作發(fā)生。 例如,某些操作系統(tǒng)將最后訪問時間作為文件元數(shù)據(jù)的一部分進行維護,并且每次讀取文件時都會更新此時間。 這是否實際完成是依賴于系統(tǒng)的,因此未指定。
此方法僅保證強制通過此類中定義的方法對此通道的文件進行更改。 它可能會也可能不會強制通過修改通過調(diào)用map方法獲得的mapped byte buffer的內(nèi)容進行更改 。 調(diào)用映射字節(jié)緩沖區(qū)的force方法將強制寫入對緩沖區(qū)內(nèi)容的更改。
參數(shù)
metaData - 如果是true則需要使用此方法強制更改文件的內(nèi)容和要寫入存儲的元數(shù)據(jù);
否則,只需強制內(nèi)容更改即可寫入
異常
transferTo public abstract?long?transferTo?(long?position,
long?count,
WritableByteChannel?target)
throws IOException
將字節(jié)從此通道的文件傳輸?shù)浇o定的可寫字節(jié)通道。
嘗試從該通道文件中的給定position開始讀取最多count個字節(jié),并將它們寫入目標通道。 調(diào)用此方法可能會也可能不會傳輸所有請求的字節(jié); 是否這樣做取決于渠道的性質(zhì)和狀態(tài)。 如果此通道的文件包含從給定的position開始的少于count字節(jié),或者目標通道是非阻塞且其輸出緩沖區(qū)中的count字節(jié)少于position ,則傳輸?shù)淖止?jié)數(shù)少于所請求的字節(jié)數(shù)。
此方法不會修改此通道的位置。 如果給定位置大于文件的當前大小,則不傳輸任何字節(jié)。 如果目標通道有一個位置,則從該位置開始寫入字節(jié),然后該位置按寫入的字節(jié)數(shù)遞增。
此方法可能比從此通道讀取并寫入目標通道的簡單循環(huán)更有效。 許多操作系統(tǒng)可以直接從文件系統(tǒng)緩存向目標通道傳輸字節(jié),而無需實際復(fù)制它們。
參數(shù)
position - 文件在轉(zhuǎn)移開始時的位置;
必須是非負面的
count - 要傳輸?shù)淖畲笞止?jié)數(shù);
必須是非負面的
target - 目標通道
結(jié)果
實際傳輸?shù)淖止?jié)數(shù),可能為零
異常
transferFrom public abstract?long?transferFrom?(ReadableByteChannel?src,
long?position,
long?count)
throws IOException
從給定的可讀字節(jié)通道將字節(jié)傳輸?shù)酱送ǖ赖奈募小?/p>
嘗試從源通道讀取最多count個字節(jié),并從給定的position開始將它們寫入此通道的文件。 調(diào)用此方法可能會也可能不會傳輸所有請求的字節(jié); 是否這樣做取決于渠道的性質(zhì)和狀態(tài)。 如果源通道剩余少于count個字節(jié),或者源通道非阻塞且輸入緩沖區(qū)中立即可用的字節(jié)數(shù)少于count少于count字節(jié)數(shù)。
此方法不會修改此通道的位置。 如果給定位置大于文件的當前大小,則不傳輸任何字節(jié)。 如果源通道有一個位置,則從該位置開始讀取字節(jié),然后將位置增加讀取的字節(jié)數(shù)。
此方法可能比從源通道讀取并寫入此通道的簡單循環(huán)更有效。 許多操作系統(tǒng)可以直接從源通道將字節(jié)傳輸?shù)轿募到y(tǒng)緩存中,而無需實際復(fù)制它們。
參數(shù)
src - 源通道
position - 文件在轉(zhuǎn)移開始時的位置;
必須是非負面的
count - 要傳輸?shù)淖畲笞止?jié)數(shù);
必須是非負面的
結(jié)果
實際傳輸?shù)淖止?jié)數(shù),可能為零
異常
read public abstract?int?read?(ByteBuffer?dst,
long?position)
throws IOException
從給定文件位置開始,從該通道讀取一個字節(jié)序列到給定緩沖區(qū)。
此方法的工作方式與read(ByteBuffer)方法相同,不同之處在于從給定文件位置開始而不是在通道的當前位置讀取字節(jié)。 此方法不會修改此通道的位置。 如果給定位置大于文件的當前大小,則不讀取任何字節(jié)。
參數(shù)
dst - 要傳輸字節(jié)的緩沖區(qū)
position - 要開始傳輸?shù)奈募恢?
必須是非負面的
結(jié)果
如果給定位置大于或等于文件的當前大小,則讀取的字節(jié)數(shù)(可能為零)或
-1
異常
write public abstract?int?write?(ByteBuffer?src,
long?position)
throws IOException
從給定的緩沖區(qū)向該通道寫入一個字節(jié)序列,從給定的文件位置開始。
此方法的工作方式與write(ByteBuffer)方法相同,不同之處在于從給定文件位置開始而不是在通道的當前位置開始寫入字節(jié)。 此方法不會修改此通道的位置。 如果給定位置大于文件的當前大小,則文件將增長以容納新字節(jié); 未指定前一個文件結(jié)尾和新寫入字節(jié)之間的任何字節(jié)的值。
參數(shù)
src - 要從中傳輸字節(jié)的緩沖區(qū)
position - 傳輸開始的文件位置;
必須是非負面的
結(jié)果
寫入的字節(jié)數(shù),可能為零
異常
map public abstract?MappedByteBuffer?map?(FileChannel.MapMode?mode,
long?position,
long?size)
throws IOException
將此頻道文件的某個區(qū)域直接映射到內(nèi)存中。
文件的區(qū)域可以以三種模式之一映射到存儲器中:
讀/寫:對結(jié)果緩沖區(qū)所做的更改最終會傳播到文件中; 它們可能會或可能不會被映射到同一文件的其他程序看到。
專用:對生成的緩沖區(qū)所做的更改不會傳播到文件,也不會對映射了同一文件的其他程序可見; 相反,它們將導(dǎo)致創(chuàng)建緩沖區(qū)的修改部分的私有副本。
對于只讀映射,必須打開此通道才能讀取; 對于讀/寫或私有映射,必須已打開此通道以進行讀取和寫入。
此方法返回的mapped byte buffer的位置為零,限制和容量為size ; 它的標記將是不確定的。 緩沖區(qū)及其表示的映射將保持有效,直到緩沖區(qū)本身被垃圾收集。
映射一旦建立,就不依賴于用于創(chuàng)建映射的文件通道。 特別是,關(guān)閉通道對映射的有效性沒有影響。
內(nèi)存映射文件的許多細節(jié)本質(zhì)上依賴于底層操作系統(tǒng),因此未指定。 未指定請求的區(qū)域未完全包含在此通道的文件中時此方法的行為。 是否通過此程序或其他程序?qū)A(chǔ)文件的內(nèi)容或大小所做的更改傳播到緩沖區(qū)是未指定的。 未指定緩沖區(qū)更改傳播到文件的速率。
對于大多數(shù)操作系統(tǒng),將文件映射到內(nèi)存比通過通常的read和write方法讀取或?qū)懭霂资ё止?jié)的數(shù)據(jù)更昂貴。 從性能的角度來看,通常只需要將相對較大的文件映射到內(nèi)存中。
lock public abstract?FileLock?lock?(long?position,
long?size,
boolean?shared)
throws IOException
獲取此通道文件的給定區(qū)域的鎖定。
調(diào)用此方法將阻塞,直到可以鎖定該區(qū)域,關(guān)閉此通道,或者中斷調(diào)用線程,以先到者為準。
如果在調(diào)用此方法期間此通道被另一個線程關(guān)閉,則將拋出AsynchronousCloseException 。
如果在等待獲取鎖定時調(diào)用線程被中斷,則將設(shè)置其中斷狀態(tài)并拋出FileLockInterruptionException 。 如果在調(diào)用此方法時設(shè)置了調(diào)用程序的中斷狀態(tài),則會立即拋出該異常; 線程的中斷狀態(tài)不會改變。
由position和size參數(shù)指定的區(qū)域不需要包含在實際底層文件中,甚至不要包含在實際底層文件中。 鎖定區(qū)域的大小是固定的; 如果鎖定區(qū)域最初包含文件的末尾并且文件超出該區(qū)域,那么該文件的新部分將不會被鎖定。 如果預(yù)計文件的大小會增加并且需要鎖定整個文件,則應(yīng)鎖定從零開始并且不小于文件的預(yù)期最大大小的區(qū)域。
某些操作系統(tǒng)不支持共享鎖,在這種情況下,對共享鎖的請求會自動轉(zhuǎn)換為獨占鎖的請求。 可以通過調(diào)用生成的鎖對象的isShared方法來測試新獲取的鎖是共享的還是獨占的。
文件鎖代表整個Java虛擬機。 它們不適合控制同一虛擬機中多個線程對文件的訪問。
參數(shù)
position - 鎖定區(qū)域開始的位置;
必須是非負面的
size - 鎖定區(qū)域的大小;
必須為非負數(shù),且總和position + size必須為非負數(shù)
shared - true請求共享鎖,在這種情況下,此通道必須打開才能讀取(并可能寫入);
false請求獨占鎖定,在這種情況下,此通道必須打開才能寫入(并可能讀取)
結(jié)果
表示新獲取的鎖的鎖對象
異常
shared是
false但此信道未開通以進行寫入
另請參見:
lock public final?FileLock?lock()
throws IOException
獲取此頻道文件的獨占鎖定。
調(diào)用fc.lock()形式的此方法的行為與調(diào)用的方式完全相同
fc.lock(0L, Long.MAX_VALUE, false)
tryLock public abstract?FileLock?tryLock?(long?position,
long?size,
boolean?shared)
throws IOException
嘗試獲取此頻道文件的給定區(qū)域的鎖定。
此方法不會阻止。 調(diào)用始終立即返回,要么已獲取所請求區(qū)域的鎖定,要么未能執(zhí)行此操作。 如果由于另一個程序持有重疊鎖而無法獲取鎖定,則返回null 。 如果由于任何其他原因而無法獲取鎖定,則會拋出相應(yīng)的異常。
由position和size參數(shù)指定的區(qū)域不需要包含在實際底層文件中,甚至不要包含在實際底層文件中。 鎖定區(qū)域的大小是固定的; 如果鎖定區(qū)域最初包含文件的末尾并且文件超出該區(qū)域,那么該文件的新部分將不會被鎖定。 如果預(yù)計文件的大小會增加并且需要鎖定整個文件,則應(yīng)鎖定從零開始并且不小于文件的預(yù)期最大大小的區(qū)域。
某些操作系統(tǒng)不支持共享鎖,在這種情況下,對共享鎖的請求會自動轉(zhuǎn)換為獨占鎖的請求。 可以通過調(diào)用生成的鎖定對象的isShared方法來測試新獲取的鎖是共享的還是獨占的。
文件鎖代表整個Java虛擬機。 它們不適合控制同一虛擬機中多個線程對文件的訪問。
參數(shù)
position - 鎖定區(qū)域開始的位置;
必須是非負面的
size - 鎖定區(qū)域的大小;
必須為非負數(shù),且總和position + size必須為非負數(shù)
shared -
true請求共享鎖,
false請求獨占鎖
結(jié)果
表示新獲取的鎖的鎖對象,如果由于另一個程序持有重疊鎖而無法獲取鎖,
null
異常
另請參見:
tryLock public final?FileLock?tryLock()
throws IOException
嘗試獲取此頻道文件的獨占鎖定。
調(diào)用fc.tryLock()形式的此方法的行為與調(diào)用的方式完全相同
fc.tryLock(0L, Long.MAX_VALUE, false)
結(jié)果
表示新獲取的鎖的鎖對象,如果由于另一個程序持有重疊鎖而無法獲取鎖,
null
異常
另請參見:
總結(jié)
以上是生活随笔為你收集整理的java filechannel api_FileChannel的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java中b的平方表示_第七届蓝桥杯Ja
- 下一篇: java hashmap扩容大小_Has