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

Java 经典实例摘记 文件相关

2017-02-24 15:28 281 查看

给Map排序(7.9)

两个方法:

1. 使用本来就基于key有序的TreeMap

2. 如果使用的是HashMap等不保证有序的Map,可以将Entry填充到ArrayList中,对ArrayList进行排序,以下是示例代码:

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

@Override
public int compare(Entry<String, Integer> o1,
Entry<String, Integer> 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而不是使用
\n
.

读取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对象在程序退出时被删除。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: