zoukankan      html  css  js  c++  java
  • Java 把一个文本文档的内容复制到另一个文本文档

    src.txt放在工程目录下,dest.txt可创建,也可不创建。一旦运行程序,如果dest.txt不存在,将自行创建这个文本文档,再将src.txt中的内容复制到dest.txt

     1 import java.io.File;
     2 import java.io.FileInputStream;
     3 import java.io.FileNotFoundException;
     4 import java.io.FileOutputStream;
     5 import java.io.IOException;
     6 import java.io.InputStream;
     7 import java.io.OutputStream;
     8 
     9 public class IOTest04 {
    10 
    11     public static void main(String[] args) {
    12         copy("src.txt", "dest.txt");
    13     }
    14     
    15     public static void copy(String srcPath, String destPath) {
    16         File src = new File(srcPath);
    17         File dest = new File(destPath);
    18         InputStream is = null;
    19         OutputStream os = null;
    20         
    21         try {
    22             is = new FileInputStream(src);
    23             os = new FileOutputStream(dest, false);
    24             
    25             byte[] buffer = new byte[1024 * 1];                    // 1k bytes
    26             int length = -1;
    27             while ((length = is.read(buffer)) != -1) {
    28                 os.write(buffer, 0, length);
    29                 os.flush();
    30             }
    31         } catch (FileNotFoundException e) {
    32             e.printStackTrace();
    33         } catch (IOException e) {
    34             e.printStackTrace();
    35         } finally {
    36             try {
    37                 if (os != null) {
    38                     os.close();
    39                     System.out.println("OutputStream Closed.");
    40                 }
    41             } catch (IOException e) {
    42                 e.printStackTrace();
    43             }
    44             try {
    45                 if (is != null) {
    46                     is.close();
    47                     System.out.println("InputStream Closed.");
    48                 }
    49             } catch (IOException e) {
    50                 e.printStackTrace();
    51             }
    52         }
    53     }
    54 }

    ----    ----    ----    ----    ----    ----    ----    ----

    读取文本文档A中的内容,先进行“加密”,将加密的内容写入到另一个文本文档B;完成加密和写入之后,再将文本文档B中(已加密)的内容复制、并覆盖文本文档A中原本的内容,删除文本文档B。

     1 import java.io.File;
     2 import java.io.FileInputStream;
     3 import java.io.FileNotFoundException;
     4 import java.io.FileOutputStream;
     5 import java.io.IOException;
     6 import java.io.InputStream;
     7 import java.io.OutputStream;
     8 
     9 public class Encrypt {
    10 
    11     public static void main(String[] args) {
    12         encrypt("src.txt", 1);
    13     }
    14     
    15     public static void encrypt(String srcPath, int password) {
    16         File src = new File(srcPath);
    17         File dest = new File(src.getParent(), ("temp" + src.getName()));
    18         InputStream is = null;
    19         OutputStream os = null;
    20         
    21         try {
    22             is = new FileInputStream(src);
    23             os = new FileOutputStream(dest);
    24             
    25             byte[] buffer = new byte[1024 * 1];                    // 1k bytes
    26             int length = -1;
    27             while ((length = is.read(buffer)) != -1) {
    28                 for (int i = 0; i < length; ++i) {
    29                     buffer[i] = (byte) (buffer[i] + password);
    30                 }
    31                 os.write(buffer, 0, length);
    32                 os.flush();
    33             }
    34         } catch (FileNotFoundException e) {
    35             e.printStackTrace();
    36         } catch (IOException e) {
    37             e.printStackTrace();
    38         } finally {
    39             try {
    40                 if (os != null) {
    41                     os.close();
    42                 }
    43             } catch (IOException e) {
    44                 e.printStackTrace();
    45             }
    46             try {
    47                 if (is != null) {
    48                     is.close();
    49                 }
    50             } catch (IOException e) {
    51                 e.printStackTrace();
    52             }
    53         }
    54         
    55         try {
    56             is = new FileInputStream(dest);
    57             os = new FileOutputStream(src);
    58             
    59             byte[] buffer = new byte[1024 * 1];                    // 1k bytes
    60             int length = -1;
    61             while ((length = is.read(buffer)) != -1) {
    62                 os.write(buffer, 0, length);
    63                 os.flush();
    64             }
    65         } catch (FileNotFoundException e) {
    66             e.printStackTrace();
    67         } catch (IOException e) {
    68             e.printStackTrace();
    69         } finally {
    70             try {
    71                 if (os != null) {
    72                     os.close();
    73                 }
    74             } catch (IOException e) {
    75                 e.printStackTrace();
    76             }
    77             try {
    78                 if (is != null) {
    79                     is.close();
    80                 }
    81             } catch (IOException e) {
    82                 e.printStackTrace();
    83             }
    84         }
    85         
    86         dest.delete();
    87     }
    88 }

    文本文档A中的内容:

    对每一个字符执行+1(实际就是将字符所对应的编码进行+1)的操作,之后变成:

    ----    ----    ----    ----    ----    ----    ----    ----

    分解一

    16         File src = new File(srcPath);
    17         File dest = new File(src.getParent(), ("temp" + src.getName()));

    getParent() - 返回此抽象路径名父目录的路径名字符串;如果此路径名没有指定父目录,则返回 null。

    getName() - 返回由此抽象路径名表示的文件或目录的名称。

    绝对路径名的定义与系统有关。在 UNIX 系统上,如果路径名的前缀是 "/",那么该路径名是绝对路径名。在 Microsoft Windows 系统上,如果路径名的前缀是后跟 "\" 的盘符,或者是 "\\",那么该路径名是绝对路径名。

     1 import java.io.File;
     2 
     3 public class IO_Test01 {
     4 
     5     public static void main(String[] args) {
     6         File src = null;
     7         File dest = null;
     8         
     9         // Relative path
    10         src = new File("src.txt");
    11         dest = new File(src.getParent(), ("temp" + src.getName()));
    12 
    13         System.out.println("Is absolute path: " + src.isAbsolute());
    14         System.out.println("src's parent: " + src.getParent());
    15         System.out.println("src's name: " + src.getName());
    16         
    17         System.out.println("dest's parent: " + dest.getParent());
    18         System.out.println("dest's name: " + dest.getName());
    19         System.out.println("--------");
    20         
    21         // Absolute path
    22         src = new File("E:/Java/workspace/IO_Study02/src.txt");
    23         dest = new File(src.getParent(), ("temp" + src.getName()));
    24 
    25         System.out.println("Is absolute path: " + src.isAbsolute());
    26         System.out.println("src's parent: " + src.getParent());
    27         System.out.println("src's name: " + src.getName());
    28         
    29         System.out.println("dest's parent: " + dest.getParent());
    30         System.out.println("dest's name: " + dest.getName());
    31     }
    32 }

    输出结果:

    Is absolute path: false
    src's parent: null
    src's name: src.txt
    dest's parent: null
    dest's name: tempsrc.txt
    --------
    Is absolute path: true
    src's parent: E:JavaworkspaceIO_Study02
    src's name: src.txt
    dest's parent: E:JavaworkspaceIO_Study02
    dest's name: tempsrc.txt

    ----    ----    ----    ----    ----    ----    ----    ----

    分解二

    25             byte[] buffer = new byte[1024 * 1];                    // 1k bytes
    26             int length = -1;
    27             while ((length = is.read(buffer)) != -1) {
    28                 for (int i = 0; i < length; ++i) {
    29                     buffer[i] = (byte) (buffer[i] + password);
    30                 }
    31                 os.write(buffer, 0, length);
    32                 os.flush();
    33             }

    其中的28~30行很好理解,这里不解释。

    关键在于方法read(byte[] b)、write(byte[] b, int off, int len)。

    public int read(byte[] b) - 从此输入流中将最多 b.length 个字节的数据读入一个 byte 数组中。在某些输入可用之前,此方法将阻塞。返回:读入缓冲区的字节总数,如果因为已经到达文件末尾而没有更多的数据,则返回 -1。

     1 import java.io.File;
     2 import java.io.FileInputStream;
     3 import java.io.FileNotFoundException;
     4 import java.io.IOException;
     5 import java.io.InputStream;
     6 
     7 public class IO_Test01 {
     8 
     9     public static void main(String[] args) {
    10         File src = new File("E:/Java/workspace/IO_Study02/src.txt");
    11         InputStream is = null;
    12         
    13         try {
    14             is = new FileInputStream(src);
    15             
    16             byte[] buffer = new byte[1024 * 1];                    // 1k bytes
    17             int length = -1;
    18             int times = 0;
    19             while ((length = is.read(buffer)) != -1) {
    20                 ++times;
    21                 System.out.println("length: " + length);
    22                 System.out.println("times: " + times);
    23             }
    24             System.out.println("length: " + length);
    25         } catch (FileNotFoundException e) {
    26             e.printStackTrace();
    27         } catch (IOException e) {
    28             e.printStackTrace();
    29         } finally {
    30             try {
    31                 if (is != null) {
    32                     is.close();
    33                 }
    34             } catch (IOException e) {
    35                 e.printStackTrace();
    36             }
    37         }
    38     }
    39 }

    输出结果:

    length: 47
    times: 1
    length: -1

    length = 47,代表从src.txt中读取到的字节数,也就是有read()返回的。

    times = 1,表示while()循环只执行了一次。

    length = -1,是while()执行第二次判断,因为src.txt中的内容已经读取完毕了,所以read()返回-1。

    public void write(byte[] b, int off, int len) - 将指定 byte 数组中从偏移量 off 开始的 len 个字节写入此文件输出流。参数:b - 数据。 off - 数据中的起始偏移量。 len - 要写入的字节数。

    ----    ----    ----    ----    ----    ----    ----    ----

    分解三

    功力不够深厚,理解不了,写不出!!!

    ----    ----    ----    ----    ----    ----    ----    ----

    分解X

    86         dest.delete();

    public boolean delete() - 删除此抽象路径名表示的文件或目录。如果此路径名表示一个目录,则该目录必须为空才能删除。返回: 当且仅当成功删除文件或目录时,返回 true;否则返回 false

    ----    ----    ----    ----    ----    ----    ----    ----

    总结:待完善、纠错。

  • 相关阅读:
    35-高级特性之iterable与iterator
    33-高级特性之generator(1)
    34-高级特性之generator(2)
    32-高级特性之类装饰器
    什么是Autolayout
    屏幕适配
    NSTimer
    分页
    UIScrollView的缩放原理
    设置图片圆角
  • 原文地址:https://www.cnblogs.com/Satu/p/10012349.html
Copyright © 2011-2022 走看看