日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

java ioutils 写入文件_文件输入输出流工具: IOUtils使用总结

發(fā)布時(shí)間:2025/3/8 编程问答 49 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java ioutils 写入文件_文件输入输出流工具: IOUtils使用总结 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

序言

以前寫文件的復(fù)制很麻煩,需要各種輸入流,然后讀取line,輸出到輸出流...其實(shí)apache.commons.io里面提供了輸入流輸出流的常用工具方法,非常方便。下面就結(jié)合源碼,看看IOUTils都有什么用處吧!

常用的靜態(tài)變量

在IOUtils中還是有很多常用的一些變量的,比如換行符等等

public static final char DIR_SEPARATOR_UNIX = '/';

public static final char DIR_SEPARATOR_WINDOWS = '\\';

public static final char DIR_SEPARATOR;

public static final String LINE_SEPARATOR_UNIX = "\n";

public static final String LINE_SEPARATOR_WINDOWS = "\r\n";

public static final String LINE_SEPARATOR;

static {

DIR_SEPARATOR = File.separatorChar;

StringBuilderWriter buf = new StringBuilderWriter(4);

PrintWriter out = new PrintWriter(buf);

out.println();

LINE_SEPARATOR = buf.toString();

out.close();

}

常用方法

copy

這個(gè)方法可以拷貝流,算是這個(gè)工具類中使用最多的方法了。支持多種數(shù)據(jù)間的拷貝:

copy(inputstream,outputstream)

copy(inputstream,writer)

copy(inputstream,writer,encoding)

copy(reader,outputstream)

copy(reader,writer)

copy(reader,writer,encoding)

copy內(nèi)部使用的其實(shí)還是copyLarge方法。因?yàn)閏opy能拷貝Integer.MAX_VALUE的字節(jié)數(shù)據(jù),即2^31-1。

copyLarge

這個(gè)方法適合拷貝較大的數(shù)據(jù)流,比如2G以上。

copyLarge(reader,writer) 默認(rèn)會(huì)用1024*4的buffer來讀取

copyLarge(reader,writer,buffer)

內(nèi)部的細(xì)節(jié)可以參考:

public static long copyLarge(Reader input, Writer output, char [] buffer) throws IOException {

long count = 0;

int n = 0;

while (EOF != (n = input.read(buffer))) {

output.write(buffer, 0, n);

count += n;

}

return count;

}

這個(gè)方法會(huì)用一個(gè)固定大小的Buffer,持續(xù)不斷的讀取數(shù)據(jù),然后寫入到輸出流中。

read

從一個(gè)流中讀取內(nèi)容

read(inputstream,byte[])

read(inputstream,byte[],offset,length)

//offset是buffer的偏移值,length是讀取的長度

read(reader,char[])

read(reader,char[],offset,length)

這里我寫了個(gè)小例子,可以測試read方法的效果:

@Test

public void readTest(){

try{

byte[] bytes = new byte[4];

InputStream is = IOUtils.toInputStream("hello world");

IOUtils.read(is, bytes);

System.out.println(new String(bytes));

bytes = new byte[10];

is = IOUtils.toInputStream("hello world");

IOUtils.read(is, bytes, 2, 4);

System.out.println(new String(bytes));

} catch (IOException e) {

e.printStackTrace();

}

}

得到的結(jié)果是:

hell

□□hell□□□□

readFully

這個(gè)方法會(huì)讀取指定長度的流,如果讀取的長度不夠,就會(huì)拋出異常

readFully(inputstream,byte[])

readFully(inputstream,byte[],offset,length)

readFully(reader,charp[])

readFully(reader,char[],offset,length)

比如:

@Test

public void readFullyTest(){

byte[] bytes = new byte[4];

InputStream is = IOUtils.toInputStream("hello world");

try {

IOUtils.readFully(is,bytes);

System.out.println(new String(bytes));

} catch (IOException e) {

e.printStackTrace();

}

}

輸出

hell

但是如果讀取20個(gè)byte,就會(huì)出錯(cuò)了

java.io.EOFException: Length to read: 20 actual: 11

at org.apache.commons.io.IOUtils.readFully(IOUtils.java:2539)

at org.apache.commons.io.IOUtils.readFully(IOUtils.java:2558)

at test.java.IOUtilsTest.readFullyTest(IOUtilsTest.java:22)

...

readLines

readLines方法可以從流中讀取內(nèi)容,并轉(zhuǎn)換為String的list

readLines(inputstream)

readLines(inputstream,charset)

readLines(inputstream,encoding)

readLines(reader)

這個(gè)方法極大簡化了之前原始的讀取方法:

@Test

public void readLinesTest(){

try{

InputStream is = new FileInputStream("D://test1.txt");

List lines = IOUtils.readLines(is);

for(String line : lines){

System.out.println(line);

}

} catch (FileNotFoundException e) {

e.printStackTrace();

} catch (IOException e) {

e.printStackTrace();

}

}

輸出內(nèi)容:

hello

world

nihao

ioutils

skip

這個(gè)方法用于跳過指定長度的流,

skip(inputstream,skip_length)

skip(ReadableByteChannel,skip_length)

skip(reader,skip_length)

例如:

@Test

public void skipTest(){

InputStream is = IOUtils.toInputStream("hello world");

try {

IOUtils.skip(is,4);

System.out.println(IOUtils.toString(is,"utf-8"));

} catch (IOException e) {

e.printStackTrace();

}

}

skipFully

這個(gè)方法類似skip,只是如果忽略的長度大于現(xiàn)有的長度,就會(huì)拋出異常

skipFully(inputstream,toSkip)

skipFully(readableByteChannel,toSkip)

skipFully(inputstream,toSkip)

例如

@Test

public void skipFullyTest(){

InputStream is = IOUtils.toInputStream("hello world");

try {

IOUtils.skipFully(is,30);

System.out.println(IOUtils.toString(is,"utf-8"));

} catch (IOException e) {

e.printStackTrace();

}

}

write

這個(gè)方法可以把數(shù)據(jù)寫入到輸出流中

write(byte[] data, OutputStream output)

write(byte[] data, Writer output)

write(byte[] data, Writer output, Charset encoding)

write(byte[] data, Writer output, String encoding)

write(char[] data, OutputStream output)

write(char[] data, OutputStream output, Charset encoding)

write(char[] data, OutputStream output, String encoding)

write(char[] data, Writer output)

write(CharSequence data, OutputStream output)

write(CharSequence data, OutputStream output, Charset encoding)

write(CharSequence data, OutputStream output, String encoding)

write(CharSequence data, Writer output)

write(StringBuffer data, OutputStream output)

write(StringBuffer data, OutputStream output, String encoding)

write(StringBuffer data, Writer output)

write(String data, OutputStream output)

write(String data, OutputStream output, Charset encoding)

write(String data, OutputStream output, String encoding)

write(String data, Writer output)

例如

@Test

public void writeTest(){

try {

OutputStream os = new FileOutputStream("E:/test.txt");

IOUtils.write("hello write!",os);

} catch (FileNotFoundException e) {

e.printStackTrace();

} catch (IOException e) {

e.printStackTrace();

}

}

writeLines

這個(gè)方法可以把string的List寫入到輸出流中

writeLines(Collection> lines, String lineEnding, OutputStream output)

writeLines(Collection> lines, String lineEnding, OutputStream output, Charset encoding)

writeLines(Collection> lines, String lineEnding, OutputStream output, String encoding)

writeLines(Collection> lines, String lineEnding, Writer writer)

例如

@Test

public void writeLinesTest() throws IOException {

List lines = new ArrayList();

lines.add("hello");

lines.add("list");

lines.add("to");

lines.add("file");

OutputStream os = new FileOutputStream("E:/test.txt");

IOUtils.writeLines(lines,IOUtils.LINE_SEPARATOR,os);

}

close

關(guān)閉URL連接

close(URLConnection conn)

closeQuietly

忽略nulls和異常,關(guān)閉某個(gè)流

close(URLConnection conn)

closeQuietly(Closeable... closeables)

closeQuietly(Closeable closeable)

closeQuietly(InputStream input)

closeQuietly(OutputStream output)

closeQuietly(Reader input)

closeQuietly(Selector selector)

closeQuietly(ServerSocket sock)

closeQuietly(Socket sock)

closeQuietly(Writer output)

contentEquals

比較兩個(gè)流是否相同

contentEquals(InputStream input1, InputStream input2)

contentEquals(Reader input1, Reader input2)

例如

@Test

public void contentEqualsTest(){

InputStream is1 = IOUtils.toInputStream("hello123");

InputStream is2 = IOUtils.toInputStream("hello123");

try {

System.out.println(IOUtils.contentEquals(is1,is2));

} catch (IOException e) {

e.printStackTrace();

}

}

contentEqualsIgnoreEOL

比較兩個(gè)流,忽略換行符

contentEqualsIgnoreEOL(Reader input1, Reader input2)

lineIterator

讀取流,返回迭代器

lineIterator(InputStream input, Charset encoding)

lineIterator(InputStream input, String encoding)

lineIterator(Reader reader)

toBufferedInputStream

把流的全部內(nèi)容放在另一個(gè)流中

toBufferedInputStream(InputStream input)

toBufferedInputStream(InputStream input, int size)

toBufferedReader

返回輸入流

toBufferedReader(Reader reader)

toBufferedReader(Reader reader, int size)

toByteArray

返回字節(jié)數(shù)組

toByteArray(InputStream input)

toByteArray(InputStream input, int size)

toByteArray(InputStream input, long size)

toByteArray(Reader input)

toByteArray(Reader input, Charset encoding)

toByteArray(Reader input, String encoding)

toByteArray(String input)

toByteArray(URI uri)

toByteArray(URL url)

toByteArray(URLConnection urlConn)

toCharArray

返回字符數(shù)組

toCharArray(InputStream is)

toCharArray(InputStream is, Charset encoding)

toCharArray(InputStream is, String encoding)

toCharArray(Reader input)

toInputStream

返回輸入流

toInputStream(CharSequence input)

toInputStream(CharSequence input, Charset encoding)

toInputStream(CharSequence input, String encoding)

toInputStream(String input)

toInputStream(String input, Charset encoding)

toInputStream(String input, String encoding)

toString

返回字符串

toString(byte[] input)

toString(byte[] input, String encoding)

toString(InputStream input)

toString(InputStream input, Charset encoding)

toString(InputStream input, String encoding)

toString(Reader input)

toString(URI uri)

toString(URI uri, Charset encoding)

toString(URI uri, String encoding)

toString(URL url)

toString(URL url, Charset encoding)

toString(URL url, String encoding)

總結(jié)

以上是生活随笔為你收集整理的java ioutils 写入文件_文件输入输出流工具: IOUtils使用总结的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。