java本地文件与文件夹

来源:互联网 发布:零基础云计算视频教程 编辑:程序博客网 时间:2024/06/05 07:07

1文件

import java.io.File;public class Operation{public static void main(String args[]){File file=new File("hello.txt");if(file.exists()){//是否是文件System.out.println(file.isFile());//路径(是否是文件夹)System.out.println(file.isDirectory());}else{System.out.println("文件不存在");try{file.createNewFile("hello.txt");System.out.println("文件成功创建");}catch (IOException e)  {e.printSSystem.out.println("文件无法创建");}}}} 以上是文件的创建

获取文件名getName()

文件路径file.getPath();

文件绝对路径 file.getAbsolutePath();

获取父级路径 file.getParent()

获取相对路径文件的父级路径 new File(file,getAbsolutePath(),getParent())

读取文件大小:fille.length()/1024+"byte"//在硬盘上是1000,整形与整形相除得整形,变为FLOAT即可,(float)fille.length()/1024+"byte

判断文件是否被隐藏:file.isHIdden()

是否可读:canRead();

是否可写:canWrite();



2.文件夹

import java.io.File;public class Operation{public static void main(String args[]){/* File folder=new File("my new folder/one/two/three/main");if(folder.mkdir()){// if(foler.mkdirs()三级以上文件夹创建System.out.println("文件夹创建完成");}else{System.out.println("文件不存在");} */File folder=new File("my new folder");File newfolder =new File("my new folder-new");if(folder.renameTo(newfolder)){System.out.println("done");}else{System.out.println("fail");}}} 以上是文件夹的创建,重命名
遍历文件夹,打印文件的目录,有层级打印,是文件夹的递归打印下级,是文件的仅打印文件名。

import java.io.File;public class Operation{public static void main(String args[]){printFile(new File("/code/java/"),1);}public static void printFile(File dir,int tab){if(dir.isDirectory()){File list[]=dir.listFiles();for(int i=0;i<list.length;i++){for(int j=0;j<tab;j++){System.out.print("---");}System.out.println(list[i].getName());if(list[i].isDirectory()){printFile(list[i],tab+1);}}}}} 

接下来我们对文件进行操作,程序中的输入输出都是以流的形式保存的,流中保存的实际上全都是字节文件一个字符由两个字节组成,字符流处理的是两个字节的Unicode字符。所以字符流是由Java虚拟机将字节转化为2个字节的Unicode字符为单位的字符而成的,所以它对多国语言支持性比较好!如果是音频文件、图片、歌曲,就用字节流好点,如果是关系到中文(文本)的,用字符流好点。

IO操作流程

1.使用File类打开一个文件;

2.通过字节流或字符流的子类指定输出位置。

3.进行读/写操作;

4.关闭输入/输出;

字节流可以将文本里面的数据读入到本地中,可以将本地的字符串写入到文件中。

   流的操作用到装饰模式,一层一层包装。比如将字节流包装成字符流。BufferedReader涉及到一个缓冲区大小,把读到的数据放进缓冲区就避免了一个一个字符的读出方式。

例一:

//字节流读取,写出数据import java.io.FileOutputStream;import java.io.FileNotFoundException;import java.io.IOException; public class Operation{ public static void main(String args[]){ /*  try{FileInputStream input=new FileInputStream("test.txt"); byte b[]=new byte[20]; input.read(b); String s=new String(b,"gbk"); System.out.println(s); } */    try{  FileOutputStream fos=new FileOutputStream("newtest.txt");//如果没有newtest.txt文件系统会自动创建一个文件  String outSring="I am not happy";  byte output[]=outSring.getBytes("gbk");//将字符串写入本地的字节数组  fos.write(output);  fos.close();   //用完后要将流关闭      }  catch(FileNotFoundException e){e.printStackTrace();}   catch(IOException e){e.printStackTrace();} }  }

例二:

带缓冲区的文件拷贝,运行速率快多了

import java.io.FileOutputStream;import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.IOException;import java.io.BufferedInputStream;import java.io.BufferedOutputStream; public class Operation{ public static void main(String args[]){try{FileInputStream fis=new FileInputStream("image01.gif");BufferedInputStream bis=new BufferedInputStream(fis);FileOutputStream fos=new FileOutputStream("image02.gif");BufferedOutputStream bos=new BufferedOutputStream(fos);byte[] input=new byte[50];//文件209,510 字节,这里字节数组是不能完全读出文件的;//int len=bis.read(input);//查看read函数,知道它返回的是一个整数,是input数组的长度,如果返回的为-1就代表没有数据int count=0;long time=System.currentTimeMillis();int len;while(( len=bis.read(input))!= -1){count++;//bos.write(input);//每次读50个字节长度的字节数组,不足50个也是读50个字节,读进去一些空字符,就导致文件打不开fos.write(input, 0, len);//当它读到不足50个字节时就写他自己读到的长度}System.out.println(count+"次");bos.close();fos.close();bis.close();fis.close();System.out.println((System.currentTimeMillis()-time)+"ms");System.out.println("done");}catch(FileNotFoundException e){e.printStackTrace();}catch(IOException e){e.printStackTrace();} }  }   

这里
System.currentTimeMillis()返回是一个long型,写为整形就要报错



例三 字节转字符操作文件

import java.io.FileOutputStream;import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.IOException;import java.io.BufferedInputStream;import java.io.BufferedOutputStream;import java.io.InputStreamReader;import java.io.File; public class Operation{ public static void main(String args[]){try{File file =new File("test.txt"); FileInputStream fis=new FileInputStream(file);InputStreamReader isr =new InputStreamReader(fis,"GBK");//接受字节转字符char input[]=new char[100];int l=0;while ((l=isr.read(input)) != -1){System.out.println(new String(input,0,l));}isr.close();fis.close();}catch(FileNotFoundException e){e.printStackTrace();}catch(IOException e){e.printStackTrace();} }  }  
例四 用FileReader和FileWriter读取文本文件,拷贝文件


import java.io.FileReader;import java.io.FileWriter;import java.io.FileNotFoundException;import java.io.IOException;import java.io.BufferedWriter;import java.io.BufferedReader;import java.io.InputStreamReader;import java.io.File; public class Operation{ public static void main(String args[]){try{FileReader fr=new FileReader("test.txt");//读取文件文本数据BufferedReader br=new BufferedReader(fr);FileWriter fw=new FileWriter("java_new.txt");BufferedWriter bw=new BufferedWriter(fw);String line;while((line = br.readLine()) != null){bw.write(line);}bw.close();fw.close();br.close();fr.close();}catch(FileNotFoundException e){e.printStackTrace();}catch(IOException e){e.printStackTrace();} }  }  





原创粉丝点击