当前位置: 首页 > >

Java 经典实例摘记 文件相关

发布时间:

给Map排序(7.9)

两个方法:
1. 使用本来就基于key有序的TreeMap
2. 如果使用的是HashMap等不保证有序的Map,可以将Entry填充到ArrayList中,对ArrayList进行排序,以下是示例代码:


Map map=new HashMap();
//here ,we pretend we having put something into map
//@Entry:java.util.Map.Entry
List> list=new ArrayList>(map.entrySet());
//这里有一点要注意:sort方法可只接受一个List的参数,但这个T要实现Compareable接口才行,否则sort需要传入一个Comparator来比较T
Collections.sort(list,new Comparator>(){/

@Override
public int compare(Entry o1,
Entry o2) {
return o1.getKey().compareTo(o2.getKey());
}

});

10. 输入和输出
使用Formmatter类(10.3)

这里和C的printf格式化输出类似,记录一下细节
调用形式:


System.out.format("%1$04d and %2$e",1,Math.PI)

其中1

、2
代表使用第几个参数,04代表如果有空余则补零,长度为4,d、e表示输出格式


格式化编码含义
%表示插入参数
c表示一个字符,或者代表字符的有效整型
d表示一个整型
e表示一个科学计数法的浮点数
g表示一个浮点数,是否为科学计数法表示取决于数量级
s常规格式化,如果参数是null则输出null,如果参数可以格式化则调用参数的formatTo方法,否则调用toString方法
t表示一个日期,参数必须是long、Long或者Date类型

重定向标准流(10.9-10.10)

标准流是指标准输入输出和标准错误:System.in,System.out,System.err



可以通过System.setOut(new FileOutPutStream(“File Path”)),重新定向标准输出到文件中,其他方法类似


对于要复制标准流,而不仅仅是重定向的情况,可以通过实现一个Stream的子类,然后覆盖方法write或read,在方法中对两个流操作,已达到复制的目的。使用时,将标准流重定向此自定义的Steam类


文件中*台无关的换行符(10.13)

如果要写入或者读出一串字符,尽量使用readLine或者println方法,或者使用File.separator而不是使用
.


读取Jar以及Zip文件(10.20)

使用java.util.zip.ZipFile类
一个ZipFile表示一个Zip或者Jar文件,其中包含若干个ZipEntry,表示文件中压缩的若干个文件
每一个ZipEntry有方法getName以及getInputStream,方便读取
一段示例代码:


ZipFile zf=new ZipFile("File path");
ZipEntry ze=zf.getEntry("entry name");
System.out.println(ze.getCompressedSize());//通过name获取指定文件
InputStream is=zf.getInputStream(ze);//获得流,方便读取

//获取所有文件
Enumeration allEntry=zf.entries();
while(allEntry.hasMoreElement()){
ZipEntry entry=allEntry.nextElement();
}

读取GUN zip压缩文件(10.21)

使用java.util.zip下的GZipInputStream和GZipOutputStream
示例代码:


FileInputStream fis=new FileInputStream("GUN zip File path");//获得压缩文件
GZipInputStream gis=new GZipInputStream(fis);//以GZip流读取文件
InputStreamReader isr=new InputStreamReader(gis);//将字节方式转化为字符方式读取
BufferedReader br=new BufferedReader(isr);//以行方式读取

11. 目录和文件操作
创建一个新文件(11.2)

使用FileOutputStream或者FileWrite类在输出的时候如果没有文件都会创建新文件,但是记得要关闭它们。
此外,如果仅仅想创建一个文件而不向其中写入任何东西,还可以使用File下的对象的createNewFile方法创建新文件(createNewFile不是静态方法,需要在对象上调用,但是对对象没有影响)


重命名文件

File是不可变对象,所以对文件的重命名需要创建两个File对象,然后调用旧文件名的renameTo方法,传入一个使用新文件名的File对象
一个实例:


/*假设在D盘存在一个名字叫做t.txt的文件,现在将其重命名为txt.txt*/
File f=new File("D:/t.txt");
f.renameTo(new File("D:/txt.txt"));//此后对象f作废,f不再和实际的文件相关联,因为没有name为t.txt的文件

创建唯一命名的临时文件,以及随程序结束而删除的文件(11.5)

File类有静态方法createTempFile,可以创建唯一命名的临时文件,尤其适合服务器多个用户同时进行操作的情况
此外,File类的对象有方法deleteOnExit,可以使调用的File对象在程序退出时被删除。



友情链接: