编写一个程序将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

用java写一个代码实现: 如何列出某个目录下的所有子目录

如何获取目录下的文件数(一行Python)

java 如何递归遍历多重目录下的指定格式文件复制到目标目录并改格式

怎么用shell脚本语言编写一个统计当前目录下的文件数目的...