最近两个周,我总算是把IO的一些东西学习了,可能先后经过两个老师,学的有些乱,好多东西不知道自己学了没有,现在先把文件的简单操作贴上,包括文件的创建,删除,查找,计数,读写,复制以及一些简单加密。
文件的创建和删除,我们可以通过一个简单的判断联系起来,核心代码如下:
private void createFile(String string) throws IOException {//抛出异常
//实例化一个File对象
File f = new File(string);
//判断文件是否存在
if(!f.exists()){
f.createNewFile();
}else{
f.delete();
}
}
另外利用这个方法还可以对目录进行创建删除操作;
文件查找的同时把查找结果列出来,进行计数,核心代码如下:
public void find(File file ,String findName){
//列出所有的子目录
File[] sonFiles = file.listFiles();
if(sonFiles != null){
for(int i=0; i < sonFiles.length; i++){
File f = sonFiles[i];
if(f.isFile()){
if(f.getName().indexOf(findName) != -1){
System.out.println(f.getAbsolutePath());
}
} else {
find(f, findName);
} } } }
public int countFile(File file){
int count = 0;
//获取file下所有的目录和文件
File [] list = file.listFiles();
//判断
if(null == list || list.length==0){
return count;
}
for(File f : list){
if(f.isFile()){
count++;
}
if(f.isDirectory()){
count+=countFile(f);
}
}
return count ;
}}
文件的读写时文件中非常重要的两个操作,读写中主要注意的是一般情况下每次读写的是一个字节,所以多字节的读出来会出现乱码,这时需要用缓冲流来读写,核心代码如下;
public void readFile(){
try {
java.io.FileInputStream fis = new FileInputStream("D:/test.txt");
System.out.println("fis.available()="+fis.available());
//新建一个与文件大小相同的字节数组
byte[] bytes = new byte[fis.available()];
//一次性把所有的数据都读到这个数组中
fis.read(bytes);
String content = new String(bytes, "GB2312");
System.out.println(content);
int c = fis.read();
while(c != -1){
System.out.print((char)c);
c = fis.read();
}
//每次记得关闭文件流
fis.close();
} catch (Exception e) {
e.printStackTrace();
} }
public void writeFile(){
try {
java.io.FileOutputStream fos = new FileOutputStream("D:/test2.txt");
String content = "你好!";
byte[] bytes = content.getBytes("gb2312");
fos.write(105);
fos.close();
} catch (Exception e) {
e.printStackTrace();
}}
加密有很多方法,在上述读写方法中,我们可以进行简单的操作就可以进行加密,读取的时候注意一点就行了,在下面的复制中有体现:
public void copyFile(String src, String dest){
try {
FileInputStream fis = new FileInputStream(src);
FileOutputStream fos = new FileOutputStream(dest);
int c = fis.read();
while(c != -1){
//加密
// c = c+1;
fos.write(c);
c = fis.read();
}
fis.close();
fos.close();
} catch (Exception e) {
e.printStackTrace();
}
}
文件还有很多方法,在API文档中都有描述,这里只是简单的操作,如果理解和代码有什么问题,请各位大神指出,说实话,我理解的也很浅.......