java 读写txt文件
读取:
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);
????}
写入:
package com.sts.common;
?
import java.io.File;
import java.io.FileOutputStream;
import java.io.OutputStream;
import java.util.Date;
?
public class FileWriteCommon {
public static void main(String[] args) throws Exception {
Date dt = new Date();// 当前时间
Long time = dt.getTime();// 这就是距离1970年1月1日0点0分0秒的毫秒数
String times = String.valueOf(time);// 毫秒数类型转换成String
// 在d盘上创建一个名为testfile的文本文件
File f = new File("D:" + File.separator + times + ".txt");
// 用FileOutputSteam包装文件,并设置文件可追加
OutputStream out = new FileOutputStream(f, true);
// 字符数组
String str = "我是一个程序员";
out.write(str.getBytes()); // 向文件中写入数据
out.write('\r'); // \r\n表示换行
out.write('\n');
out.close(); // 关闭输出流
System.out.println("写入成功!");
}
}