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

java学习笔记(十五)

2016-05-08 19:55 369 查看
1.java.io.File基本的API

File(String)

long length()

long lastModified()

String getName()

String getPath()

boolean exists()

boolean dir.isFile()

boolean dir.isDirectory()

boolean mkdir()//创建一个目录

boolean mkdirs()//创建路径上的很多不存在的目录

boolean delete()

boolean creatNewFile()throws IOexception

File[] listFile()

2.回调模式FileFilter

File[] listFile(FileFilter)

例子:

public static void main(String[] args) {
File dir=new File(".");
//	File[] list=dir.listFiles(new MyFilter());
File[] list=dir.listFiles(<span style="color:#ff0000;">new FileFilter(){//匿名内部类实现
public boolean accept(File pathname){
System.out.println(pathname.getName());
return pathname.getName().startsWith(".");
}
});
System.out.println(Arrays.toString(list));
}
/*	static class MyFilter implements FileFilter{//静态内部类实现
public boolean accept(File pathname){
System.out.println(pathname.getName());//跟踪代码
return pathname.getName().startsWith(".");
}
}*/


3.java.io.RandomAccessFile可以访问(读/写)一个文件中任意位置的字节信息

RandomAccessFile(File,String)throws FileNotFoundException

arg0表示要访问的文件

arg1表示访问的模式

RandomAccessFile维护一个指针,指向要读写的位置,指针会随着读写自动后移

int read()//每读完一个数据,指针就会向后移动一下下

seek()//可以用来移动指针的位置

void write(int)//写数据

long getFilePointer()//获取指针位置

例子:

public static void main(String[] args)
throws IOException,FileNotFoundException{
File file=new File("demo.txt");
//	File file=new File("src/demo.txt");
RandomAccessFile raf=new RandomAccessFile(file,"rw");<span style="white-space:pre">			</span>//以读写模式打开文件
System.out.println(raf.getFilePointer());<span style="white-space:pre">				</span>//打印目前指针的位置
int b=raf.read();<span style="white-space:pre">							</span>//读取目前指针指向位置的内容
System.out.println(Integer.toHexString(b));
raf.close();<span style="white-space:pre">								</span>//关闭文件
String mail="1,11";
System.out.println(readMail("123.txt",mail));<span style="white-space:pre">				</span>//调用readMail()函数
lowcase("demo.txt");<span style="white-space:pre">							</span>//将文件中的大写字母全部变成小写字母
}
<span style="white-space:pre">	</span>//按照code来读取相应位置的内容
public static String readMail(String filename,String code)
throws IOException{
File file=new File(filename);
RandomAccessFile raf=new RandomAccessFile(file,"r");<span style="white-space:pre">				</span>//以读模式打开文件
String[] idx=code.split(",");<span style="white-space:pre">							</span>//对code进行切分
StringBuilder buf=new StringBuilder();
for(int i=0;i<idx.length;i++){
String s=idx[i];
raf.seek(Integer.parseInt(s));<span style="white-space:pre">						</span>//移动指针
int b=raf.read();<span style="white-space:pre">							</span>//读出内容
char c=(char)b;
buf.append(c);
}
raf.close();
return buf.toString();
}
//利用123.txt.加密一段原文,返回代码序列
public static void lowcase(String filename)
throws IOException{
File file=new File(filename);
RandomAccessFile raf=new RandomAccessFile(file,"rw");<span style="white-space:pre">				</span>//以读写模式打开文件
long pos=0;<span style="white-space:pre">									</span>//文件指针位置
while(pos<file.length()){<span style="white-space:pre">							</span>//判断是否到达文件结尾
int b=raf.read();
if(b>='A'&&b<='Z'){<span style="white-space:pre">							</span>//b是大写字母
b=b-'A'+'a';<span style="white-space:pre">							</span>//大写变小写
raf.seek(raf.getFilePointer()-1);<span style="white-space:pre">				</span>//指针回退
raf.write(b);<span style="white-space:pre">					</span>//执行完写操作,指针也会向下移动一个位置,因此就不用在应用seek来调整指<span style="white-space:pre">											</span>//针的位置
}
pos++;<span style="white-space:pre">							</span>//每处理一次要对已处理长度进行一次自增
}
raf.close();<span style="white-space:pre">							</span>//关闭文件
}
<span style="white-space:pre">	</span>public static void main(String[] args) throws IOException{
File file=new File("demo.txt");
RandomAccessFile raf=new RandomAccessFile(file,"rw");<span style="white-space:pre">		</span>//以读写模式打开文件
byte[] buf=new byte[5];<span style="white-space:pre">						</span>//设置buf的大小,也就是一次读取的大小
//将文件中数据读取到byte缓冲区,返回读取数量
int count=raf.read(buf);<span style="white-space:pre">					</span>//调用带有参数的read方法,一次将buf大小的数据读入
System.out.print(count+",");<span style="white-space:pre">					</span>//count表示读取的数据大小
System.out.println(Arrays.toString(buf));
raf.seek(raf.length());<span style="white-space:pre">						</span>//移动到文件尾
raf.write(buf,1,3);<span style="white-space:pre">						</span>//从第一个位置开始,将buf其后连续的3个英文字符写入到file中
raf.close();<span style="white-space:pre">							</span>//关闭文件
}
/*将一个小文件读取到内存的byte数组中*/
public static byte[] read(String filename) throws IOException{
File file=new File(filename);
RandomAccessFile raf=new RandomAccessFile(file,"r");<span style="white-space:pre">		</span>//以读模式打开文件
int length=(int) raf.length();<span style="white-space:pre">					</span>//得到文件长度
byte[] buf=new byte[length];<span style="white-space:pre">					</span>//声明一个和文件大小一样的buf
raf.read(buf);<span style="white-space:pre">							</span>//一次读取一批,一次就读完了
raf.close();<span style="white-space:pre">							</span>//关闭文件
return buf;
}


4.java.io.InputStream 输入流 读到文件尾返回-1

java.io.OutputStream输出流

例子:

输入流实例:

public static void main(String[] args) throws IOException{
readDemo();
readByBufferDemo();
}
private static void readByBufferDemo()throws IOException{
InputStream in=new FileInputStream("demo2.txt");<span style="white-space:pre">		</span>//输入流形式打开文件
byte[] buf=new byte[10];
//count 是读取的数据个数:1~10>0,如果-1到文件尾
int count;
while((count=in.read(buf))!=-1){<span style="white-space:pre">				</span>//遍历文件
System.out.println(toHexString(buf));
}
in.close();
}
<span style="white-space:pre">	</span>//以十六进制形式显示文件内容,只显示后16位
private static String toHexString(byte[] ary){
StringBuilder buf=new StringBuilder();
for(int i=0;i<ary.length;i++){
byte b=ary[i];<span style="white-space:pre">					</span>//得到一个字节的内容
int a=b & 0xff;<span style="white-space:pre">					</span>//利用掩码运算,去除高24位
String hex=Integer.toHexString(a);<span style="white-space:pre">		</span>//将其转换成16进制
buf.append(hex).append(" ");
}
return buf.toString();
}
public static void readDemo()throws IOException{
InputStream in=new FileInputStream("demo.txt");<span style="white-space:pre">		</span>//输入流打开文件
//读取文件的一个byte,无符号数填充到int的低八位
//0x000000ff~0x00000000
//如果读到文件尾,返回-1
//将一个文件迭代输出
int b;
while((b=in.read())!=-1){
System.out.println(b);
}
in.close();<span style="white-space:pre">						</span>//关闭文件
}
输出流实例
public static void main(String[] args) throws IOException{
writeDemo();
}
private static void writeDemo()throws IOException{
OutputStream out=new FileOutputStream("test.txt");<span style="white-space:pre">		</span>//以输出流打开文件
//写出一个int的低八位
out.write(65);//A
out.write(66);
//汉字(GBK/GB2312)编码方式
out.write(0xbd);
out.write(0xd3);
out.write(0xd6);
out.write(0xd0);
out.write(0xbf);
out.write(0xda);//写一个byte
//write的重载形式
byte[] buf={98,99,(byte)0xd6,(byte)0xd0};
out.write(buf);<span style="white-space:pre">						</span>//向文件中写入buf中的内容
out.write(buf, 2, 2);<span style="white-space:pre">					</span>//向文件中写一个数组的一部分,buf中从第2个位置开始写两个
//按照GBK编码将试试吧进行编码,然后写到buf中
out.write("试试吧".getBytes("GBK"));<span style="white-space:pre">			</span>//将“试试吧”以GBK编码方式写入文件中
out.close();
}

复制一个文件实例

public static void copy(String src,String dst)
throws IOException{
InputStream in=new FileInputStream(src);<span style="white-space:pre">			</span>//原文件为输入流
OutputStream out=new FileOutputStream(dst);<span style="white-space:pre">			</span>//目的文件为输出流
byte[] buf=new byte[1024];
int c;
while((c=in.read(buf))!=-1){<span style="white-space:pre">					</span>//一次读1024个byte
out.write(buf,0,c);<span style="white-space:pre">					</span>//最后一次可能不满,这样写保险
}
in.close();<span style="white-space:pre">							</span>//关闭文件
out.close();
}


<span style="white-space:pre">	</span>//BufferedInputStream,BufferedOutputStream会提高读取的效率,但是也不是说所有的读写操作都要用这个
public static void main(String[] args) throws IOException{
//打开带有输入缓冲的流,当读取流中的数据时,BIS会将数据成块读取到内存数组,然后再读取出来
BufferedInputStream in=new BufferedInputStream(new FileInputStream("demo.txt"));
int b=in.read();<span style="white-space:pre">						</span>//b是按段读取,每段的第一个byte
System.out.println(b);
in.close();
//创建带有输出缓存的流,BufferedOutputStream可以为任意的流提供输出缓冲区管理,写出的数据先缓冲到BufferedOutputStream的byte数组中
//在缓冲满了以后,一次性的写到目标流里面
BufferedOutputStream out=<span style="white-space:pre">					</span>//这里直接写OutputStream,下面两个都是它的子类
new BufferedOutputStream(
new FileOutputStream("test2.txt"));
out.write(0x41);//写出到缓存中
out.flush();//将流中的缓冲区强行进行写盘
out.close();//关闭一个流时才会强行的将缓冲区中的东西写出去,关闭流时默认执行flush
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: