------<a href="http://www.itheima.com" target="blank">Java培训、Android培训、iOS培训、.Net培训</a>、期待与您交流! -------
- IO说到底不外乎读与写
- 编写一个程序,把这个目录下的java文件拷贝到另一个目录中,并将.java改为.txt
- 编写一个程序,把这个目录下的所有的java文件拷贝到另一个目录中,并将.java改为.txt
- 取出D盘下全部的.java文件的文件路径保存在java.txt文件中。
package demo; import java.io.File; import java.io.FileReader; import java.io.FileWriter; import java.io.FilenameFilter; import java.io.IOException; //编写一个程序,把某个目录下的java文件拷贝到另一个目录中,并将.java改为.txt /** * 思路: * 1.封装数据源 * 2.获取目录下.java的文件数组 * 3.封装目的地,判断是否存在,不存在就创建 * 4.遍历文件数组,获取每一个文件的名称,创建新名字。 * 5.封装具体实例的目的地 * 6.读,写 * 7.刷新,释放资源, * 注意:考了文件copy的基本步骤,IO流的读写,用到了匿名内部类(文件名称过滤器),字符串的常见的操作。 * 理清了这些基本的操作思路,题目就明朗了。当然了,读和写,还可以用其他的流来进行操作。 * 这里出现的异常被我抛了。 * */ public class Demo10 { public static void main(String[] args) throws IOException { //封装数据源 File f = new File("e:\\"); //获取该数据的所有.Java文件数组 File[] arr=f.listFiles(new FilenameFilter() {//文件过滤器 public boolean accept(File dir, String name) { //判断是否是文件并且后缀名是否为.java return new File(dir,name).isFile()&&name.endsWith(".java"); } }); //封装目的地 File fm = new File("f:\\ddd"); //判断是否存在,不存在就创建 if(!fm.exists()){ fm.mkdirs(); } //遍历文件数组 for (int i = 0; i < arr.length; i++) { String name=arr[i].getName(); //改名字 String newName=name.replace(".java", ".txt"); //封装每一个实例对象的目的地 File file = new File(fm,newName); //读写 FileReader r = new FileReader(arr[i]); FileWriter w = new FileWriter(file); int len=0; char[] chs=new char[1024]; while((len=r.read(chs))!=-1){ w.write(chs,0,len); //刷新缓冲区 w.flush(); } //关闭流 w.close(); r.close(); } } }
- *****************************************************************************************************************************
package demo; import java.io.File; import java.io.FileReader; import java.io.FileWriter; import java.io.IOException; //编写一个程序,把某个目录下的所有的java文件拷贝到另一个目录中,并将.java改为.txt /** * 这一个和上一题差不多,只是包过了他的子文件夹,这里用递归来做。 * 思路: * 1.封装数据源 * 2.获取数据源下所有的file对象的数组 * 3.判断数组是否为空,不为空就遍历,获取到每一个file对象,判断是否是文件夹 * 是:重复2 * 否:判断后缀名是否是.java * 是:该名字,封装每个实例对象的目的地。 * 5.读,写, * 6.释放资源 */ public class Demo10_2 { public static void main(String[] args) throws IOException { //封装数据源 File fy = new File("d:\\"); get(fy); } /** * copy文件的方法 * @param fy 数据源 * @throws IOException */ private static void get(File fy) throws IOException { //封装目的地 File ff=new File("f:\\zzzz"); if(!ff.exists()){ ff.mkdirs(); } //获取数据源下的所有file数组 File[] arr=fy.listFiles(); //判断数组是否为空 if(arr!=null){ //不为空就遍历数组 for(File file:arr){ //如果是文件夹,就重复前面的操作,直到没有文件夹 if(file.isDirectory()){ get(file); }else{ //文件就判断后缀名是否为.java if(file.getName().endsWith(".java")){ //是就该名字 String s=file.getName().replace(".java", ".txt"); //封装实例对象的目的地 File fm=new File(ff,s); //读写 FileReader r=new FileReader(file); FileWriter w=new FileWriter(fm); int len=0; char[] chs=new char[1024]; while((len=r.read(chs))!=-1){ w.write(chs,0,len); w.flush(); } r.close(); w.close(); } } } } } }
- ***********************************************************************************************************************
package test; import java.io.BufferedWriter; import java.io.File; import java.io.FileWriter; import java.io.IOException; //取出D盘下全部的.java文件的文件路径保存在java.txt文件中。、 /** * 思路: * 1.封装数据源 * 2.获取数据源下所有的file对象的数组 * 3.定义一个字符缓冲流(封装目的地需要先判断,这里我直接写在了F盘符下面,就省略了这一步,如果是考试可能会扣* *<span style="white-space:pre"> </span>分) * 4.判断数组是否为空,不为空就遍历,获取到每一个file对象,判断是否是文件夹 * 是:重复2 * 否:判断后缀名是否是.java * 是:获取绝对路径,写数据,换行,刷新。 * 5.关闭流对象 *注意:这里的写入数据得追加写入。 */ public class Demo14_2 { public static void main(String[] args) throws IOException { //封装数据源 File f = new File("d:\\"); get(f); } /** * 获取f目录下的所有.Java文件的绝对路径,写入。 * @param f * @throws IOException */ private static void get(File f) throws IOException { //获取数据源下所有的file对象的数组 File[] arr = f.listFiles(); //创建一个写入流 BufferedWriter bf = new BufferedWriter(new FileWriter("f:\\ff.txt",true)); //判断数组是否为空 if (arr != null) { //遍历数组 for (File file : arr) { //file对象为文件夹就重复 if (file.isDirectory()) { get(file); } else { //如果为文件,判断其后缀名 if (file.getName().endsWith(".java")) { //获取其绝对路径的字符串 String s = file.getAbsolutePath(); //写 bf.write(s); //换行 bf.newLine(); //刷新 bf.flush(); } } } bf.close();//关闭流对象 } } }