编写一个程序将d:java目录下的所有.java文件复制到d:jad目录下,并将原来文件的扩展名从.java改为.jad
Posted 小潘同学
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了编写一个程序将d:java目录下的所有.java文件复制到d:jad目录下,并将原来文件的扩展名从.java改为.jad相关的知识,希望对你有一定的参考价值。
一、思路
1、打开指定目录 d:\\\\java
File file = new File("d:\\\\java");//文件对象
2、判断该目录是否存在以及是否为目录 file.exists() && file.isDirectory()
if (!(file.exists() && file.isDirectory())) { throw new FileNotFoundException("目录不存在"); }
3、找到目录下的.java文件 new FilenameFilter(){} 、endsWith()
// FilenameFilter():文件过滤器,用来筛选不符合的文件,返回符合的文件 // endsWith():用以测试是否以指定后缀结束,结果返回布尔型 File[] files = file.listFiles(new FilenameFilter(){ @Override public boolean accept(File dir, String name) { return name.endsWith(".java"); } });
4、打开 d:\\\\jad
File deskdir = new File("d:\\\\jad");
5、判断目录是否存在
if (!(deskdir.exists()&& deskdir.isDirectory())) { deskdir.mkdir(); }
6、用循环遍历改文件名并复制
6.1 改文件名 。replace()
String destFileName = file2.getName().replace(".java", ".jad");
6.2 使用缓冲流复制
FileInputStream fis = new FileInputStream(file2);//创建文件输入流对象 FileOutputStream fos = new FileOutputStream(new File(deskdir,destFileName));//创建文件输出流对象 copy(fis, fos);//自定义复制方法
7、关闭流
fis.close();
fos.close();
二、编程实现
import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.FilenameFilter; import java.io.IOException; public class FileCopy { public static void main(String[] args) throws IOException { // 1、打开d:\\\\java File file = new File("d:\\\\java");//文件对象 // 2、判断目录是否存在 // isDirectory():判断是否为目录 if (!(file.exists() && file.isDirectory())) { throw new FileNotFoundException("目录不存在"); } // 3、找到目录下的.java文件 // FilenameFilter():文件过滤器,用来筛选不符合的文件,返回符合的文件 // endsWith():用以测试是否以指定后缀结束,结果返回布尔型 File[] files = file.listFiles(new FilenameFilter() { @Override public boolean accept(File dir, String name) { return name.endsWith(".java"); } }); System.out.println(files.length); // 4、打开 d:\\\\jad File deskdir = new File("d:\\\\jad"); // 5、判断文件是否存在,不存在就创建 if (!(deskdir.exists()&& deskdir.isDirectory())) { deskdir.mkdir(); } // 6、替换文件名为.jad,并且复制到指定目录下 for (File file2 : files) { // 6.1 使用文件流实现文件名更改 String destFileName = file2.getName().replace(".java", ".jad"); System.out.println(destFileName); // 6.2 使用缓冲流加快效率 FileInputStream fis = new FileInputStream(file2);//创建文件输入流对象 FileOutputStream fos = new FileOutputStream(new File(deskdir,destFileName));//创建文件输出流对象 copy(fis, fos);//自定义复制方法 fis.close(); fos.close(); System.out.println("复制完成"); } } private static void copy(FileInputStream fis, FileOutputStream fos)throws IOException { int len = 0; byte[] bytes = new byte[1024]; while ((len = fis.read(bytes)) != -1) { fos.write(bytes, 0, len); } } }
三、FileOutputStream--->文件输出流(向文件写入数据)和FileInputStream--->类文件输入流(读取文件数据)
1、FileOutputStream :用于写入诸如图像数据之类的原始字节的流。
构造方法:
① FileOutputStream(File file) :创建一个向指定 File 对象表示的文件中写入数据的文件输出流。
public class FileOutputStreamDemo { public static void main(String[] args) throws IOException { // 1、用File类打开本地文件 File file = new File("a.txt");//文件对象 try{ // 2、实例化输入输出流 FileOutputStream fos=new FileOutputStream(file);//创建文件输出流对象 // 3、然后调用流的读写方法读取或写入数据 fos.write(fos); }catch(FileNotFindException e){ e.printStackTrace(); }finally{ if(fos != null){ // 4、关闭流 try{ fos.close();//关闭此文件输出流并释放资源 }catch(IOException e){ throw new RuntimeException("关闭失败!"); } } } } }
② FileOutputStream(File file, boolean append) :创建一个向指定 File 对象表示的文件中写入数据的文件输出流。
public class FileOutputStreamDemo { public static void main(String[] args) throws IOException { File file = new File("a.txt");//文件对象 try{ FileOutputStream fos=new FileOutputStream(file, true);//创建文件输出流对象 fos.write(fos); }catch(FileNotFindException e){ e.printStackTrace(); }finally{ if(fos != null){ try{ fos.close();//关闭此文件输出流并释放资源 }catch(IOException e){ throw new RuntimeException("关闭失败!"); } } } } }
③ FileOutputStream(FileDescriptor fdObj) :创建一个向指定文件描述符处写入数据的输出文件流,该文件描述符表示一个到文件系统中的某个实际文件的现有连接。
④ FileOutputStream(String name) :创建一个向具有指定名称的文件中写入数据的输出文件流。
FileOutputStream的构造方法允许直接传入文件路径,而无须使用File对象。
public class FileOutputStreamDemo { public static void main(String[] args) throws IOException { try{ FileOutputStream fos=new FileOutputStream(file);//创建文件输出流对象 fos.write(fos); }catch(FileNotFindException e){ e.printStackTrace(); }finally{ if(fos != null){ try{ fos.close();//关闭此文件输出流并释放资源 }catch(IOException e){ throw new RuntimeException("关闭失败!"); } } } } }
⑤ FileOutputStream(String name, boolean append) :创建一个向具有指定 name 的文件中写入数据的输出文件流。
常用方法:
① void write(byte[] b) :将 b.length 个字节从指定 byte 数组写入此文件输出流中。
② void write(byte[] b, int off, int len) :将指定 byte 数组中从偏移量 off 开始的 len 个字节写入此文件输出流。
③ void write(int b) :将指定字节写入此文件输出流。
④ close() :关闭此文件输出流并释放与此流有关的所有系统资源。
2、FileInputStream :用于读取诸如图像数据之类的原始字节流。
构造方法:
① FileInputStream(File file) :通过打开一个到实际文件的连接来创建一个 FileInputStream,该文件通过文件系统中的 File 对象 file 指定。
public class FileInputStreamDemo { public static void main(String[] args) throws IOException { //文件对象必须存在,比如a.txt可以没有 FileInputStream fis=new FileInputStream("a.txt");//创建文件输出流对象 //fis.read()每次读取只读取一个字节。如果直接输出会是对应的ascii值。故而将其转换为char System.out.println("第一次读取的内容是:"+fis.read());//直接输出第一个字节对应的ascii码 System.out.println("第二次读取的内容是:"+(char)fis.read());//输出原字符 fis.close();//关闭此文件输出流并释放资源 } }
② FileInputStream(FileDescriptor fdObj) :通过使用文件描述符 fdObj 创建一个 FileInputStream,该文件描述符表示到文件系统中某个实际文件的现有连接。
③ FileInputStream(String name) :通过打开一个到实际文件的连接来创建一个 FileInputStream,该文件通过文件系统中的路径名 name 指定。
public class FileInputStreamDemo { public static void main(String[] args) throws IOException { FileInputStream fis=new FileInputStream("a.txt");//创建文件输出流对象 // 一次读取一个自定义数组的长度 byte[] bys = new byte[1024]; int len = 0; // while是判断是为了防止读取空内容 while ((len = fis.read(bys)) != -1) { System.out.println(len);//当前从文件读取到的字节数 System.out.print(new String(bys, 0, len));//一次读取一个规定字节数组的长度来读取文件 } fis.close();//关闭此文件输出流并释放资源 } }
常用方法:
① int read() : 从此输入流中读取一个数据字节。
② int read(byte[] b) : 从此输入流中将最多 b.length 个字节的数据读入一个 byte 数组中。
③ int read(byte[] b, int off, int len) :从此输入流中将最多 len 个字节的数据读入一个 byte 数组中。
④ void close():关闭此文件输入流并释放与此流有关的所有系统资源
以上是关于编写一个程序将d:java目录下的所有.java文件复制到d:jad目录下,并将原来文件的扩展名从.java改为.jad的主要内容,如果未能解决你的问题,请参考以下文章
编写一个程序将d:java目录下的所有.java文件复制到d:jad目录下,并将原来文件的扩展名从.java改为.jad
Java算法面试题:编写一个程序,将e: eck目录下的所有.java文件复制到e:jpg目录下,并将原来文件的扩展名从.java改为.jpg