zoukankan      html  css  js  c++  java
  • 分享下通过java 读取目录及子目录下指定文件名的路径 并放到一个List数组里面返回遍历和写到文件里(同时将不会出现覆盖问题和重复读入问题)

    import java.io.*;

    import java.util.Scanner;

    public class ListFiles01
    {
    private static String listFileStr;
    static int ch;
    static Scanner sc = new Scanner(System.in);

    public static void main(String[] args)
    {
    Delete();//调用方法
    //删除操作,目的是防止重复录入和检查文件是否存在
    System.out.print("开始录入: ");
    System.out.println("————————");
    try
    {
    File file = new File(args[1]);
    //在命令行参数中输入文件名
    FileWriter fw = new FileWriter(file);
    //实例化一个FileWriter变量
    ListFiles01 lf = new ListFiles01();
    lf.listFile(args[0]);
    //将地址名传入,并且调用方法

    //在命令行参数中输入地址
    fw.write(listFileStr);
    fw.close();

    } catch (ArrayIndexOutOfBoundsException e)
    {
    // 参数提示
    System.out.println("No 'source dir' or 'target file' ");
    //如果在命令行参数中没有写入两个名称,即地址和文件名
    //不存在地址或者文件名
    } catch (IOException e)
    {
    System.out.println("IO error! " + e.toString());
    }
    }

    private static void Delete()//静态方法
    {
    File file = new File("Output.doc");//文件名称
    if (file.exists())
    {
    System.out.println("该文件存在");
    file.delete();//删除操作
    } else
    {
    System.out.println("该文件不存在,新建...");
    try
    {
    file.createNewFile();//文件新建操作
    } catch (IOException e)
    {
    e.printStackTrace();
    }
    }
    }

    private int i;

    public void listFile(String str) throws IOException//含有String形参
    {
    File file = new File(str);
    File list[] = file.listFiles();
    for (i = 0; i < list.length; i++)//循环,重复读入
    {
    if (list[i].isDirectory())// 判断是否为文件夹
    {
    // System.out.println(list[i]
    // .getPath()); // 输出文件夹名称
    // listFile(list[i].getPath());
    //继续向该文件夹目录下面深入
    //并且new一个新的对象、调用方法、继续判断
    new ListFiles01().listFile(list[i].toString());// 递归
    } else
    {
    listFileStr = list[i].getAbsolutePath() + " ";//隔行
    System.out.println(list[i].getAbsolutePath());//输出文件名称
    byte[] buffer = listFileStr.getBytes();
    //通过字节数组来将控制台中写入的数据再次读入文件夹中
    if (buffer != null)
    {
    FileOutputStream outputStream = new FileOutputStream(
    "Output.doc", true);
    //定义FileOutputStream对象时增加了一个参数true
    //用于一行一行写入,防止覆盖上一行的内容
    outputStream.write(buffer);
    outputStream.close();
    }
    }
    }
    }
    }

    /*以上为从命令行读入,还有就是下方的从控制台输入,相比而言,控制台输入更加方便*/

    import java.io.*;
    import java.util.Scanner;

    public class ListFiles02
    {
    private static final String list = null;
    private static String str = null;
    private static String listFileStr;
    static int ch;
    static Scanner sc = new Scanner(System.in);

    public static void main(String[] args)
    {
    Delete();
    System.out.println("输入你选择的地址: ");
    System.out.print("——————");
    try
    {
    FileWriter fw = new FileWriter("outputstream.doc", true);
    ListFiles02 lf = new ListFiles02();
    // 输入路径
    Scanner sc = new Scanner(System.in);
    str = sc.nextLine();
    lf.listFile(str);
    fw.write(listFileStr);
    fw.close();

    } catch (ArrayIndexOutOfBoundsException e)
    {
    // 参数提示
    System.out.println("No 'source dir' or 'target file' ");

    } catch (IOException e)
    {
    System.out.println("IO error! " + e.toString());
    }
    }

    private static void Delete()
    {
    File file = new File("outputstream.doc");
    if (file.exists())
    {
    System.out.println("该文件存在");
    file.delete();
    } else
    {
    System.out.println("该文件不存在,新建...");
    try
    {
    file.createNewFile();
    } catch (IOException e)
    {
    e.printStackTrace();
    }
    }
    }

    private int i;

    public void listFile(String str) throws IOException
    {
    File file = new File(str);
    File list[] = file.listFiles();
    for (i = 0; i < list.length; i++)
    {

    if (list[i].isDirectory())
    {
    // // 判断是否为文件夹
    // System.out.println(list[i]
    // .getPath()); // 输出文件夹名称
    // listFile(list[i].getPath());
    new ListFiles02().listFile(list[i].toString());// 递归
    } else
    {
    listFileStr = list[i].getAbsolutePath() + " ";
    System.out.println(list[i].getAbsolutePath());
    byte[] buffer = listFileStr.getBytes();
    if (buffer != null)
    {
    FileOutputStream outputStream = new FileOutputStream(
    "outputstream.doc", true);
    outputStream.write(buffer);
    outputStream.close();
    }
    }
    }
    }
    }

  • 相关阅读:
    如何解决虚拟机频繁分离和附加磁盘导致的识别错误
    创建基于 AFS 的 Docker 容器卷
    使用 docker-machine 管理 Azure 容器虚拟机
    SSH 无法启动的原因分析及解决方法
    Azure 经典模式中虚拟机证书指纹的生成和作用
    远程桌面到 Ubuntu 虚拟机
    Azure Linux 虚拟机常见导致无法远程的操作
    Azure Linux 虚机上配置 RAID 的常见问题及解决方案
    使用 Azure CLI 在 Azure China Cloud 云平台上手动部署一套 Cloud Foundry
    数据库设计(六)第二范式(2NF)?
  • 原文地址:https://www.cnblogs.com/ghostTao/p/3660194.html
Copyright © 2011-2022 走看看