复制文件与FileOutputStream和FileInputStream : 文件输入流 « 文件输入输出 « Java

En
Java
1. 图形用户界面
2. 三维图形动画
3. 高级图形
4. 蚂蚁编译
5. Apache类库
6. 统计图
7. 
8. 集合数据结构
9. 数据类型
10. 数据库JDBC
11. 设计模式
12. 开发相关类
13. EJB3
14. 电子邮件
15. 事件
16. 文件输入输出
17. 游戏
18. 泛型
19. GWT
20. Hibernate
21. 本地化
22. J2EE平台
23. 基于J2ME
24. JDK-6
25. JNDI的LDAP
26. JPA
27. JSP技术
28. JSTL
29. 语言基础知识
30. 网络协议
31. PDF格式RTF格式
32. 映射
33. 常规表达式
34. 脚本
35. 安全
36. Servlets
37. Spring
38. Swing组件
39. 图形用户界面
40. SWT-JFace-Eclipse
41. 线程
42. 应用程序
43. Velocity
44. Web服务SOA
45. 可扩展标记语言
Java 教程
Java » 文件输入输出 » 文件输入流屏幕截图 
复制文件与FileOutputStream和FileInputStream
复制文件与FileOutputStream和FileInputStream
  

/*
 * Copyright (c) 2004 David Flanagan.  All rights reserved.
 * This code is from the book Java Examples in a Nutshell, 3nd Edition.
 * It is provided AS-IS, WITHOUT ANY WARRANTY either expressed or implied.
 * You may study, use, and modify it for any non-commercial purpose,
 * including teaching and use in open-source projects.
 * You may distribute it non-commercially as long as you retain this notice.
 * For a commercial use license, or to purchase the book, 
 * please visit http://www.davidflanagan.com/javaexamples3.
 */

import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;

/**
 * This class is a standalone program to copy a file, and also defines a static
 * copy() method that other programs can use to copy files.
 */
public class FileCopy {
  /** The main() method of the standalone program. Calls copy(). */
  public static void main(String[] args) {
    if (args.length != 2// Check arguments
      System.err.println("Usage: java FileCopy <source> <destination>");
    else {
      // Call copy() to do the copy; display any error messages
      try {
        copy(args[0], args[1]);
      catch (IOException e) {
        System.err.println(e.getMessage());
      }
    }
  }

  /**
   * The static method that actually performs the file copy. Before copying the
   * file, however, it performs a lot of tests to make sure everything is as it
   * should be.
   */
  public static void copy(String from_name, String to_namethrows IOException {
    File from_file = new File(from_name)// Get File objects from Strings
    File to_file = new File(to_name);

    // First make sure the source file exists, is a file, and is readable.
    // These tests are also performed by the FileInputStream constructor
    // which throws a FileNotFoundException if they fail.
    if (!from_file.exists())
      abort("no such source file: " + from_name);
    if (!from_file.isFile())
      abort("can't copy directory: " + from_name);
    if (!from_file.canRead())
      abort("source file is unreadable: " + from_name);

    // If the destination is a directory, use the source file name
    // as the destination file name
    if (to_file.isDirectory())
      to_file = new File(to_file, from_file.getName());

    // If the destination exists, make sure it is a writeable file
    // and ask before overwriting it. If the destination doesn't
    // exist, make sure the directory exists and is writeable.
    if (to_file.exists()) {
      if (!to_file.canWrite())
        abort("destination file is unwriteable: " + to_name);
      // Ask whether to overwrite it
      System.out.print("Overwrite existing file " + to_file.getName() "? (Y/N): ");
      System.out.flush();
      // Get the user's response.
      BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
      String response = in.readLine();
      // Check the response. If not a Yes, abort the copy.
      if (!response.equals("Y"&& !response.equals("y"))
        abort("existing file was not overwritten.");
    else {
      // If file doesn't exist, check if directory exists and is
      // writeable. If getParent() returns null, then the directory is
      // the current dir. so look up the user.dir system property to
      // find out what that is.
      String parent = to_file.getParent()// The destination directory
      if (parent == null// If none, use the current directory
        parent = System.getProperty("user.dir");
      File dir = new File(parent)// Convert it to a file.
      if (!dir.exists())
        abort("destination directory doesn't exist: " + parent);
      if (dir.isFile())
        abort("destination is not a directory: " + parent);
      if (!dir.canWrite())
        abort("destination directory is unwriteable: " + parent);
    }

    // If we've gotten this far, then everything is okay.
    // So we copy the file, a buffer of bytes at a time.
    FileInputStream from null// Stream to read from source
    FileOutputStream to = null// Stream to write to destination
    try {
      from new FileInputStream(from_file)// Create input stream
      to = new FileOutputStream(to_file)// Create output stream
      byte[] buffer = new byte[4096]// To hold file contents
      int bytes_read; // How many bytes in buffer

      // Read a chunk of bytes into the buffer, then write them out,
      // looping until we reach the end of the file (when read() returns
      // -1). Note the combination of assignment and comparison in this
      // while loop. This is a common I/O programming idiom.
      while ((bytes_read = from.read(buffer)) != -1)
        // Read until EOF
        to.write(buffer, 0, bytes_read)// write
    }
    // Always close the streams, even if exceptions were thrown
    finally {
      if (from != null)
        try {
          from.close();
        catch (IOException e) {
          ;
        }
      if (to != null)
        try {
          to.close();
        catch (IOException e) {
          ;
        }
    }
  }

  /** A convenience method to throw an exception */
  private static void abort(String msgthrows IOException {
    throw new IOException("FileCopy: " + msg);
  }
}

   
    
  
Related examples in the same category
1. 复制文件
2. 利用FileInputStream读取文件
3. 使用FileInputStream跳过N字节读文件
4. 复制一个文件到另一个文件
5. 复制一个文件到另一个FileChannel
6. 读取字节,并显示其十六进制值
7. Reading a File into a Byte Array: reads the entire contents of a file into a byte array
8. 使用Java NIO 复制文件
9. 读文件字节
10. 读取文件字符
11. Count characters with FileInputStream
12. 读取和复制与FileInputStream和FileOutputStream
13. 读取文件到字节数组使用FileInputStream
14. 以十六进制显示文件内容
www.java2java.com | Contact Us
Copyright 2010 - 2030 Java Source and Support. All rights reserved.
All other trademarks are property of their respective owners.