黑马程序员技术交流社区

标题: day8-day12总结 [打印本页]

作者: 赵永旗    时间: 2019-5-13 14:46
标题: day8-day12总结
复制多级文件夹
public class CopyFoldersDemo {
    public static void main(String[] args) throws IOException {
        //创建数据源File对象,路径是E:\\itcast
        File srcFile = new File("E:\\itcast");
        //创建目的地File对象,路径是F:\\
        File destFile = new File("F:\\");

        //写方法实现文件夹的复制,参数为数据源File对象和目的地File对象
        copyFolder(srcFile,destFile);
    }

    //复制文件夹
    private static void copyFolder(File srcFile, File destFile) throws IOException {
        //判断数据源File是否是目录
        if(srcFile.isDirectory()) {
            //在目的地下创建和数据源File名称一样的目录
            String srcFileName = srcFile.getName();
            File newFolder = new File(destFile,srcFileName); //F:\\itcast
            if(!newFolder.exists()) {
                newFolder.mkdir();
            }

            //获取数据源File下所有文件或者目录的File数组
            File[] fileArray = srcFile.listFiles();

            //遍历该File数组,得到每一个File对象
            for(File file : fileArray) {
                //把该File作为数据源File对象,递归调用复制文件夹的方法
                copyFolder(file,newFolder);
            }
        } else {
            //说明是文件,直接复制,用字节流
            File newFile = new File(destFile,srcFile.getName());
            copyFile(srcFile,newFile);
        }
    }

    //字节缓冲流复制文件
    private static void copyFile(File srcFile, File destFile) throws IOException {
        BufferedInputStream bis = new BufferedInputStream(new FileInputStream(srcFile));
        BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(destFile));

        byte[] bys = new byte[1024];
        int len;
        while ((len = bis.read(bys)) != -1) {
            bos.write(bys, 0, len);
        }

        bos.close();
        bis.close();
    }
}

多线程实现文件上传下载
public class ClientDemo {
  public static void main(String[] args) throws IOException {
    //创建客户端Socket对象
    Socket s = new Socket("192.168.1.66",10000);
    //封装文本文件的数据
    BufferedReader br = new BufferedReader(new
FileReader("myNet\\InetAddressDemo.java"));
    //封装输出流写数据
    BufferedWriter bw = new BufferedWriter(new
OutputStreamWriter(s.getOutputStream()));
    String line;
    while ((line=br.readLine())!=null) {
      bw.write(line);
      bw.newLine();
      bw.flush();
   }
    s.shutdownOutput();
    //接收反馈
    BufferedReader brClient = new BufferedReader(new
InputStreamReader(s.getInputStream()));
    String data = brClient.readLine(); //等待读取数据
    System.out.println("服务器的反馈:" + data);
    //释放资源
    br.close();
    s.close();
}
}
public class ServerThread implements Runnable {
  private Socket s;
  public ServerThread(Socket s) {
    this.s = s;
}
  @Override
  public void run() {
    try {
      //接收数据写到文本文件
      BufferedReader br = new BufferedReader(new
InputStreamReader(s.getInputStream()));
      //解决名称冲突问题
      int count = 0;
      File file = new File("myNet\\Copy["+count+"].java");
      while (file.exists()) {
        count++;
        file = new File("myNet\\Copy["+count+"].java");
     }
      BufferedWriter bw = new BufferedWriter(new FileWriter(file));
      String line;
      while ((line=br.readLine())!=null) {
        bw.write(line);
        bw.newLine();
        bw.flush();
     }
      //给出反馈
      BufferedWriter bwServer = new BufferedWriter(new
OutputStreamWriter(s.getOutputStream()));
      bwServer.write("文件上传成功");
      bwServer.newLine();
      bwServer.flush();
      //释放资源
      s.close();
   } catch (IOException e) {
      e.printStackTrace();
   }
}
}
public class ServerDemo {
  public static void main(String[] args) throws IOException {
    //创建服务器Socket对象
    ServerSocket ss = new ServerSocket(10000);
    while (true) {
      //监听客户端连接,返回一个对应的Socket对象
      Socket s = ss.accept();
      //为每一个客户端开启一个线程
      new Thread(new ServerThread(s)).start();
   }
}
}







欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2