import java.io.*;
import java.util.Calendar;
/**
* 字符流读写的例子类
*/
public class FileIoDemo {
//打印方法
public static void print(String s)
{
System.out.println(s);
}
//取得现在的日期,格式yyyymmddhhmmss
public static String getCurrentDate() {
Calendar cal = Calendar.getInstance();
int year = cal.get(cal.YEAR);
int month = cal.get(cal.MONTH) + 1;
int day = cal.get(cal.DAY_OF_MONTH);
int hour = cal.get(cal.HOUR_OF_DAY);
int minute = cal.get(cal.MINUTE);
int second = cal.get(cal.SECOND);
String cDate = Integer.toString(year);
if (month < 10) {
cDate = cDate + "0" + Integer.toString(month);
} else {
cDate = cDate + Integer.toString(month);
}
if (day < 10) {
cDate = cDate + "0" + Integer.toString(day);
} else {
cDate = cDate + Integer.toString(day);
}
if (hour < 10) {
cDate = cDate + "0" + Integer.toString(hour);
} else {
cDate = cDate + Integer.toString(hour);
}
if (minute < 10) {
cDate = cDate + "0" + Integer.toString(minute);
} else {
cDate = cDate + Integer.toString(minute);
}
if (second < 10) {
cDate = cDate + "0" + Integer.toString(second);
} else {
cDate = cDate + Integer.toString(second);
}
return cDate.trim();
}
//文件字符流输入输出测试方法
public static void fileIOtest()
{
String path_source="G:/logs/fileIOtest/source/";
String fileName_source="source.txt";
String path_bak="G:/logs/fileIOtest/bak/";
String fileName_bak;
try {
//读文件
File f_s=new File(path_source,fileName_source); //f_s指向路径为path_source,名字为fileName_source的文件
FileReader fr_s=new FileReader(f_s); //创建可以读取文件内容的Reader类的对象
BufferedReader br_s=new BufferedReader(fr_s,8192);//创建缓冲长度为8192的缓冲字符流对象
String str;
int i;
print(f_s.exists()?fileName_source+" exist":fileName_source+" not exist");
print(f_s.getParent());//返回父目录名
print(f_s.getAbsolutePath());
br_s.mark(8192);//在输入流的当前点放置一下标记,该流在读取8192个字节之前都有效
while( (str=br_s.readLine())!=null)
{
print(str);
}
//读写文件
fileName_bak=getCurrentDate()+".txt";
File f_b=new File(path_bak,fileName_bak);
FileWriter fw_b=new FileWriter(f_b); //创建可以写文件内容的Writer类的对象
BufferedWriter bw_b=new BufferedWriter(fw_b);//创建缓冲长度为默认缓冲器长度的缓冲字符流对象
//第一种读写方式
/*br_s.reset();//重新设置输入指针到先前设置的标志处
while( (str=br_s.readLine())!=null)//此种写入方式较快,但写入时不会显示换行
{
bw_b.write(str+'/n');
bw_b.flush();
}*/
//第二种读写方式
/*br_s.reset();//重新设置输入指针到先前设置的标志处
while( (i=br_s.read())!=-1)//此种写入方式较慢,但写入时会显示换行,和原文件一样
{
bw_b.write(i);
bw_b.flush();
}*/
bw_b.close(); fw_b.close();//关闭相关对象
br_s.close(); fr_s.close();
print(f_b.delete()?"file delete success":"file delete failure");
f_b=new File(path_bak,fileName_bak);
//在重命文件名时,必须注意:
//1 相关的BufferedWriter,BufferReader,FileReader,FileWriter对象必须关闭
//2 新文件的路径必须存在,新文件路径可以和源文件不在同一个路径
//3 新文件名不能存在
print(f_s.renameTo(f_b)?"first rename success":"first rename failure");
print(f_b.renameTo(f_s)?"second rename success":"second rename failure");
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}finally{
}
}
// 测试函数
public static void main(String[] args) {
fileIOtest();
}
}