1、对Java编程中的文件操作详解对Java编程中的文件操作详解一.获得控制台用户输入的信息/* */*获得控制台用户输入的信息以下是代码片段:* return* throws IOException*/public String getInputMessage() throws IOException.System.out.println(请输入您的命令);byte buffer=new byte1024;int count=System.in.read(buffer);char ch=new charcount-2;/最后两位为结束符,删去不要for(int i=0;i chi=(char)b
2、ufferi;String str=new String(ch);return str;可以返回用户输入的信息,不足之处在于不支持中文输入,有待进一步改进。二.复制文件1.以文件流的方式复制文件/* */*以文件流的方式复制文件以下是代码片段:* param src 文件源目录* param dest 文件目的目录* throws IOException*/public void copyFile(String src,String dest) throws IOException.FileInputStream in=new FileInputStream(src);File file=ne
3、w File(dest);if(!file.exists()file.createNewFile();FileOutputStream out=new FileOutputStream(file);int c;byte buffer=new byte1024;while(c=in.read(buffer)!=-1).for(int i=0;i out.write(bufferi);in.close();out.close();该方法经过测试,支持中文处理,并且可以复制多种类型,比如txt,xml,jpg,doc等多种格式三.写文件1.利用PrintStream写文件以下是代码片段:/* */*
4、 文件输出示例*/public void PrintStreamDemo().try .FileOutputStream out=new FileOutputStream(D:/test.txt);PrintStream p=new PrintStream(out);for(int i=0;i10;i+)p.println(This is +i+ line); catch (FileNotFoundException e) .e.printStackTrace();2.利用StringBuffer写文件以下是代码片段:public void StringBufferDemo() throws
5、IOException.File file=new File(/root/sms.log);if(!file.exists()file.createNewFile();FileOutputStream out=new FileOutputStream(file,true);for(int i=0;i10000;i+).StringBuffer sb=new StringBuffer();sb.append(这是第+i+行:前面介绍的各种方法都不关用,为什么总是奇怪的问题 );out.write(sb.toString().getBytes(utf-8);out.close();该方法可以设定使
6、用何种编码,有效解决中文问题。四.文件重命名以下是代码片段:/* */*文件重命名* param path 文件目录* param oldname 原来的文件名* param newname 新文件名*/public void renameFile(String path,String oldname,String newname).if(!oldname.equals(newname)./新的文件名和以前文件名不同时,才有必要进行重命名File oldfile=new File(path+/+oldname);File newfile=new File(path+/+newname);if(
7、newfile.exists()/若在该目录下已经有一个文件和新文件名相同,则不允许重命名System.out.println(newname+已经存在!);else.oldfile.renameTo(newfile);五.转移文件目录转移文件目录不等同于复制文件,复制文件是复制后两个目录都存在该文件,而转移文件目录则是转移后,只有新目录中存在该文件。/* */*转移文件目录以下是代码片段:* param filename 文件名* param oldpath 旧目录* param newpath 新目录* param cover 若新目录下存在和转移文件具有相同文件名的文件时,是否覆盖新目录
8、下文件,cover=true将会覆盖原文件,否则不操作*/public void changeDirectory(String filename,String oldpath,String newpath,boolean cover).if(!oldpath.equals(newpath).File oldfile=new File(oldpath+/+filename);File newfile=new File(newpath+/+filename);if(newfile.exists()./若在待转移目录下,已经存在待转移文件if(cover)/覆盖oldfile.renameTo(ne
9、wfile);elseSystem.out.println(在新目录下已经存在:+filename);else.oldfile.renameTo(newfile);六.读文件1.利用FileInputStream读取文件以下是代码片段:/* */*读文件* param path* return* throws IOException*/public String FileInputStreamDemo(String path) throws IOException.File file=new File(path);if(!file.exists()|file.isDirectory()thro
10、w new FileNotFoundException();FileInputStream fis=new FileInputStream(file);byte buf = new byte1024;StringBuffer sb=new StringBuffer();while(fis.read(buf)!=-1).sb.append(new String(buf);buf=new byte1024;/重新生成,避免和上次读取的数据重复return sb.toString();2.利用BufferedReader读取在IO操作,利用BufferedReader和BufferedWriter效
11、率会更高一点以下是代码片段:/* */*读文件* param path* return* throws IOException*/public String BufferedReaderDemo(String path) throws IOException.File file=new File(path);if(!file.exists()|file.isDirectory()throw new FileNotFoundException();BufferedReader br=new BufferedReader(new FileReader(file);String temp=null;
12、StringBuffer sb=new StringBuffer();temp=br.readLine();while(temp!=null).sb.append(temp+ );temp=br.readLine();return sb.toString();3.利用dom4j读取xml文件以下是代码片段:/* */*从目录中读取xml文件* param path 文件目录* return* throws DocumentException* throws IOException*/public Document readXml(String path) throws DocumentExce
13、ption, IOException.File file=new File(path);BufferedReader bufferedreader = new BufferedReader(new FileReader(file);SAXReader saxreader = new SAXReader();Document document = (Document)saxreader.read(bufferedreader);bufferedreader.close();return document;七.创建文件(文件夹)1.创建文件夹 /* */*创建文件夹以下是代码片段:* param
14、path 目录*/public void createDir(String path).File dir=new File(path);if(!dir.exists()dir.mkdir();2.创建新文件 /* */*创建新文件以下是代码片段:* param path 目录* param filename 文件名* throws IOException*/public void createFile(String path,String filename) throws IOException.File file=new File(path+/+filename);if(!file.exis
15、ts()file.createNewFile();八.删除文件(目录)1.删除文件以下是代码片段:/*删除文件* param path 目录* param filename 文件名*/public void delFile(String path,String filename).File file=new File(path+/+filename);if(file.exists()&file.isFile()file.delete();2.删除目录要利用File类的delete()方法删除目录时,必须保证该目录下没有文件或者子目录,否则删除失败,因此在实际应用中,我们要删除目录,必须利用递归删除该目录下的所有子目录和文件,然后再删除该目录。以下是代码片段:/*递归删除文件夹* param path*/public void delDir(String path).File dir=new File(path);if(dir.exists().File tmp=dir.listFiles();for(int i=0;i if(tmpi.isDirectory().delDir(path+/+tmpi.getName();else.tmpi.delete();dir.delete();