您的位置:首页 > 编程语言 > Java开发

[Java]读取文件方法大全

2011-06-23 12:58 651 查看
1、按字节读取文件内容

2、按字符读取文件内容

3、按行读取文件内容

4、随机读取文件内容

public

class

ReadFromFile {

/**

* 以字节为单位读取文件,常用于读二进制文件,如图片、声音、影像等文件。

*/

public

static

void

readFileByBytes(String fileName) {

File file

=

new

File(fileName);

InputStream in

=

null

;

try

{

System.out.println(

"

以字节为单位读取文件内容,一次读一个字节:

"

);

//

一次读一个字节

in

=

new

FileInputStream(file);

int

tempbyte;

while

((tempbyte

=

in.read())

!=

-

1

) {

System.out.write(tempbyte);

}

in.close();

}

catch

(IOException e) {

e.printStackTrace();

return

;

}

try

{

System.out.println(

"

以字节为单位读取文件内容,一次读多个字节:

"

);

//

一次读多个字节

byte

[] tempbytes

=

new

byte

[

100

];

int

byteread

=

0

;

in

=

new

FileInputStream(fileName);

ReadFromFile.showAvailableBytes(in);

//

读入多个字节到字节数组中,byteread为一次读入的字节数

while

((byteread

=

in.read(tempbytes))

!=

-

1

) {

System.out.write(tempbytes,

0

, byteread);

}

}

catch

(Exception e1) {

e1.printStackTrace();

}

finally

{

if

(in

!=

null

) {

try

{

in.close();

}

catch

(IOException e1) {

}

}

}

}

/**

* 以字符为单位读取文件,常用于读文本,数字等类型的文件

*/

public

static

void

readFileByChars(String fileName) {

File file

=

new

File(fileName);

Reader reader

=

null

;

try

{

System.out.println(

"

以字符为单位读取文件内容,一次读一个字节:

"

);

//

一次读一个字符

reader

=

new

InputStreamReader(

new

FileInputStream(file));

int

tempchar;

while

((tempchar

=

reader.read())

!=

-

1

) {

//

对于windows下,/r/n这两个字符在一起时,表示一个换行。

//

但如果这两个字符分开显示时,会换两次行。

//

因此,屏蔽掉/r,或者屏蔽/n。否则,将会多出很多空行。

if

(((

char

) tempchar)

!=

'

/r

'

) {

System.out.print((

char

) tempchar);

}

}

reader.close();

}

catch

(Exception e) {

e.printStackTrace();

}

try

{

System.out.println(

"

以字符为单位读取文件内容,一次读多个字节:

"

);

//

一次读多个字符

char

[] tempchars

=

new

char

[

30

];

int

charread

=

0

;

reader

=

new

InputStreamReader(

new

FileInputStream(fileName));

//

读入多个字符到字符数组中,charread为一次读取字符数

while

((charread

=

reader.read(tempchars))

!=

-

1

) {

//

同样屏蔽掉/r不显示

if

((charread

==

tempchars.length)

&&

(tempchars[tempchars.length

-

1

]

!=

'

/r

'

)) {

System.out.print(tempchars);

}

else

{

for

(

int

i

=

0

; i

<

charread; i

++

) {

if

(tempchars[i]

==

'

/r

'

) {

continue

;

}

else

{

System.out.print(tempchars[i]);

}

}

}

}

}

catch

(Exception e1) {

e1.printStackTrace();

}

finally

{

if

(reader

!=

null

) {

try

{

reader.close();

}

catch

(IOException e1) {

}

}

}

}

/**

* 以行为单位读取文件,常用于读面向行的格式化文件

*/

public

static

void

readFileByLines(String fileName) {

File file

=

new

File(fileName);

BufferedReader reader

=

null

;

try

{

System.out.println(

"

以行为单位读取文件内容,一次读一整行:

"

);

reader

=

new

BufferedReader(

new

FileReader(file));

String tempString

=

null

;

int

line

=

1

;

//

一次读入一行,直到读入null为文件结束

while

((tempString

=

reader.readLine())

!=

null

) {

//

显示行号

System.out.println(

"

line

"

+

line

+

"

:

"

+

tempString);

line

++

;

}

reader.close();

}

catch

(IOException e) {

e.printStackTrace();

}

finally

{

if

(reader

!=

null

) {

try

{

reader.close();

}

catch

(IOException e1) {

}

}

}

}

/**

* 随机读取文件内容

*/

public

static

void

readFileByRandomAccess(String fileName) {

RandomAccessFile randomFile

=

null

;

try

{

System.out.println(

"

随机读取一段文件内容:

"

);

//

打开一个随机访问文件流,按只读方式

randomFile

=

new

RandomAccessFile(fileName,

"

r

"

);

//

文件长度,字节数

long

fileLength

=

randomFile.length();

//

读文件的起始位置

int

beginIndex

=

(fileLength

>

4

)

?

4

:

0

;

//

将读文件的开始位置移到beginIndex位置。

randomFile.seek(beginIndex);

byte

[] bytes

=

new

byte

[

10

];

int

byteread

=

0

;

//

一次读10个字节,如果文件内容不足10个字节,则读剩下的字节。

//

将一次读取的字节数赋给byteread

while

((byteread

=

randomFile.read(bytes))

!=

-

1

) {

System.out.write(bytes,

0

, byteread);

}

}

catch

(IOException e) {

e.printStackTrace();

}

finally

{

if

(randomFile

!=

null

) {

try

{

randomFile.close();

}

catch

(IOException e1) {

}

}

}

}

/**

* 显示输入流中还剩的字节数

*/

private

static

void

showAvailableBytes(InputStream in) {

try

{

System.out.println(

"

当前字节输入流中的字节数为:

"

+

in.available());

}

catch

(IOException e) {

e.printStackTrace();

}

}

public

static

void

main(String[] args) {

String fileName

=

"

C:/temp/newTemp.txt

"

;

ReadFromFile.readFileByBytes(fileName);

ReadFromFile.readFileByChars(fileName);

ReadFromFile.readFileByLines(fileName);

ReadFromFile.readFileByRandomAccess(fileName);

}

}

5.将内容追加到文件尾部

public

class
AppendToFile {

/**

* A方法追加文件:使用RandomAccessFile

*/

public

static

void
appendMethodA(String fileName, String content) {

try
{

//
打开一个随机访问文件流,按读写方式

RandomAccessFile randomFile
=

new
RandomAccessFile(fileName,
"
rw
"
);

//
文件长度,字节数

long
fileLength
=
randomFile.length();

//
将写文件指针移到文件尾。

randomFile.seek(fileLength);

randomFile.writeBytes(content);

randomFile.close();

}
catch
(IOException e) {

e.printStackTrace();

}

}

/**

* B方法追加文件:使用FileWriter

*/

public

static

void
appendMethodB(String fileName, String content) {

try
{

//
打开一个写文件器,构造函数中的第二个参数true表示以追加形式写文件

FileWriter writer
=

new
FileWriter(fileName,
true
);

writer.write(content);

writer.close();

}
catch
(IOException e) {

e.printStackTrace();

}

}

public

static

void
main(String[] args) {

String fileName
=

"
C:/temp/newTemp.txt
"
;

String content
=

"
new append!
"
;

//
按方法A追加文件

AppendToFile.appendMethodA(fileName, content);

AppendToFile.appendMethodA(fileName,
"
append end. /n
"
);

//
显示文件内容

ReadFromFile.readFileByLines(fileName);

//
按方法B追加文件

AppendToFile.appendMethodB(fileName, content);

AppendToFile.appendMethodB(fileName,
"
append end. /n
"
);

//
显示文件内容

ReadFromFile.readFileByLines(fileName);

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: