======================================================
注:本文源代码点此下载
======================================================
1.流
java.io包有两个主要部分:字符流和字节流。字符是指16位的utf-16字符,而字节通常是8位的。字符流主要用于基于文本的i/o,而字节流主要用于基于二进制数据的i/o。字节流被称为输入流(input stream)与输出流(output stream),而字符流被称为读取器(reader)与写入器(writer)。
inputstream类是java.io包中大多数字节输入流的超类。主要方法有:
public abstract int read()throw ioexception:从输入流中读取数据的下一个字节。返回 0 到 255 范围内的 int 字节值。如果因为已经到达流末尾而没有可用的字节,则返回值 -1。在输入数据可用、检测到流末尾或者抛出异常前,此方法一直阻塞。
public int read(byte[] buf, int offset, int count)throws ioexception:将输入流中最多count个数据字节读入byte 数组。尝试读取count个字节,但读取的字节也可能小于该值。以整数形式返回实际读取的字节数。在输入数据可用、检测到流末尾或者抛出异常前,此方法一直阻塞。如果count为0,则不读取任何字节并返回 0;否则,尝试读取至少一个字节。如果因为流位于文件末尾而没有可用的字节,则返回值 -1;否则,至少读取一个字节并将其存储在buf中。将读取的第一个字节存储在元素buf[offset]中,下一个存储在buf[offset+1]中,依次类推。读取的字节数最多等于count。设k为实际读取的字节数;这些字节将存储在buf[offset]到buf[offset+k-1]的元素中,不影响buf[offset+k]到buf[offset+count-1]的元素。
public int read(byte[] buf)throws ioexception:等价于read(buf, 0, buf.length)。
public void close()throws ioexception:关闭输入流。
outputstream类是表示输出字节流的所有类的超类。主要方法有:
public abstract void write(int b)throws ioexception:将指定的字节写入此输出流。要写入的字节是参数b的低8位,高24位将被忽略。
public void write(byte[] buf, int offset, int count)throws ioexception:将指定byte数组中从偏移量offset开始的count个字节写入此输出流。
public void write(byte[] buf)throws ioexception:等价于write(byte[] buf, 0, buf.length)。
public void flush()throws ioexception:刷新此输出流并强制写出所有缓冲的输出字节。
public void close()throws ioexception:关闭输出流。
用于读取或者写入字符流的抽象类是reader和writer。reader类的主要方法:
public int read()throws ioexception:读取单个字符。在字符可用、发生i/o 错误或者已到达流的末尾前,此方法一直阻塞。
public abstract int read(char[] buf, int offset, int count)throws ioexception:将字符读入为char数组的一部分。在某个输入可用、发生 i/o 错误或者到达流的末尾前,此方法一直阻塞。
public int read(char[] buf)throws ioexception:等价于read(char[] buf, 0, buf.length)。
public abstract void close()throws ioexception:关闭输入流。
writer类的主要方法:
public void write(int ch)throws ioexception:写入单个字符。要写入的字符包含在给定整数值的低16位中,高16位被忽略。
public abstract void write(char[] buf, int offset, int count)throws ioexception:写入字符数组的某一部分。
public void write(char[] buf)throws ioexception:等价于write(buf, 0, buf.length)。
public void write(string str, int offset, int count)throws ioexception:写入字符串的某一部分。
public void write(string str)throws ioexception:等价于write(str, 0, str.length())。
public abstract void flush()throws ioexception:刷新流。
public abstract void close()throws ioexception:关闭流。
inputstreamreader与outstreamwrite是字符流与字节流转化的桥梁。inputstreamreader使用指定的字符集读取字节并将其解码为字符。每次调用 inputstreamreader 中的一个 read() 方法都会导致从底层输入流读取一个或多个字节。要启用从字节到字符的有效转换,可以提前从底层流读取更多的字节,使其超过满足当前读取操作所需的字节。outputstreamwrite使用指定的字符集将要写入流中的字符编码成字节。
2.文件操作
file类是文件和目录的路径名的抽象表示形式。
import java.io.file;
import java.util.date;
/**
* 获取文件的基本信息
*/
public class getfileinfos {
public static void println(string s){
system.out.println(s);
}
public static void main(string[] args) {
//用文件路径新建一个文件对象。路径可以是绝对路径也可以是相对路径
//传入的参数被当作为文件的抽象路径
file file = new file("c:/temp/newtemp.txt");
//获取文件的名字,不包括路径
println("文件名:\t" + file.getname());
//将抽象路径名中的文件分隔符用系统默认分隔符替换
println("文件路径:\t" + file.getpath());
//获取文件的绝对路径
println("绝对路径:\t" + file.getabsolutepath());
//获取抽象路径名的父抽象路径
println("父目录:\t" + file.getparent());
println("文件是否存在:\t" + file.exists());
println("是否可读:\t" + file.canread());
println("是否可写:\t" + file.canwrite());
println("是否是隐藏文件:\t" + file.ishidden());
println("是否是普通文件:\t" + file.isfile());
println("是否是文件目录:\t" + file.isdirectory());
println("文件路径是否是绝对路径:\t" + file.isabsolute());
println("文件路径的uri:\t" + file.touri());
println("文件最后修改时间:\t" + new date(file.lastmodified()));
println("文件大小:\t" + file.length() + " bytes");
}
}
file类的list方法返回该目录下所有文件的文件名(不包含路径信息)。listfiles方法返回该目录下所有文件的file对象。filenamefilter是文件名过滤器接口类,自定义的文件名过滤器必须实现该接口的accept方法。
import java.io.file;
import java.io.filenamefilter;
public class listfileutil {
/**
* 这是一个内部类,实现了filenamefilter接口,用于过滤文件
*/
static class myfilenamefilter implements filenamefilter{
//文件名后缀
private string suffix = "";
public myfilenamefilter(string surfix){
this.suffix = surfix;
}
public boolean accept(file dir, string name) {
//如果文件名以surfix指定的后缀相同,便返回true,否则返回false
if (new file(dir, name).isfile()){
return name.endswith(suffix);
}else{
//如果是文件夹,则直接返回true
return true;
}
}
}
/**
* 列出目录下所有文件包括子目录的文件路径
* @param dirname文件夹的文件路径
*/
public static void listallfiles(string dirname){
//如果dir不以文件分隔符结尾,自动添加文件分隔符。
if (!dirname.endswith(file.separator)){
dirname = dirname + file.separator;
}
file dirfile = new file(dirname);
//如果dir对应的文件不存在,或者不是一个文件夹,则退出
if (!dirfile.exists() || (!dirfile.isdirectory())){
system.out.println("list失败!找不到目录:" + dirname);
return;
}
//列出源文件夹下所有文件(包括子目录)
file[] files = dirfile.listfiles();
for (int i = 0; i if (files[i].isfile()){
system.out.println(files[i].getabsolutepath() + " 是文件!");
}else if (files[i].isdirectory()){
system.out.println(files[i].getabsolutepath() + " 是目录!");
listfileutil.listallfiles(files[i].getabsolutepath());
}
}
}
/**
* 列出目录中通过文件名过滤器过滤后的文件。
* @param filter文件名过滤器对象
* @param dirname目录名
*/
public static void listfilesbyfilenamefilter(filenamefilter filter, string dirname){
//如果dir不以文件分隔符结尾,自动添加文件分隔符。
if (!dirname.endswith(file.separator)){
dirname = dirname + file.separator;
}
file dirfile = new file(dirname);
//如果dir对应的文件不存在,或者不是一个文件夹,则退出
if (!dirfile.exists() || (!dirfile.isdirectory())){
system.out.println("list失败!找不到目录:" + dirname);
return;
}
//列出源文件夹下所有文件(包括子目录)
file[] files = dirfile.listfiles(filter);
for (int i = 0; i if (files[i].isfile()){
system.out.println(files[i].getabsolutepath() + " 是文件!");
}else if (files[i].isdirectory()){
system.out.println(files[i].getabsolutepath() + " 是目录!");
listfileutil.listfilesbyfilenamefilter(filter, files[i].getabsolutepath());
}
}
}
public static void main(string[] args) {
string dir = "c:/temp";
system.out.println((dir + "目录下的内容: "));
listfileutil.listallfiles(dir);
system.out.println();
system.out.println("经过过滤器过滤后的内容:");
//新建一个文件名过滤器。参数为".txt"
filenamefilter myfilenamefilter = new listfileutil.myfilenamefilter(".txt");
listfileutil.listfilesbyfilenamefilter(myfilenamefilter, dir);
}
}
======================================================
在最后,我邀请大家参加新浪APP,就是新浪免费送大家的一个空间,支持PHP+MySql,免费二级域名,免费域名绑定 这个是我邀请的地址,您通过这个链接注册即为我的好友,并获赠云豆500个,价值5元哦!短网址是http://t.cn/SXOiLh我创建的小站每天访客已经达到2000+了,每天挂广告赚50+元哦,呵呵,饭钱不愁了,\(^o^)/