黑马程序员技术交流社区

标题: 请大家帮我找下原因,为什么我复制文件不成功。谢谢 [打印本页]

作者: eycrckag    时间: 2013-5-11 19:09
标题: 请大家帮我找下原因,为什么我复制文件不成功。谢谢
本帖最后由 Sword 于 2013-5-15 09:00 编辑

package com.itheima;

import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.FileReader; import java.io.FileWriter; import java.io.IOException; public class Test7 {

/** * @param args * 编写程序拷贝一个文件, 尽量使用效率高的 方式. */public static void main(String[] args) { // TODO Auto-generated method stub BufferedReader bufr = null; BufferedWriter bufw = null;

try {//分别创建一个读取和写入流 对象和源/目的文件相关联。并加入缓冲技术。 bufr = new BufferedReader(new FileReader("Test1.java")); bufw = new BufferedWriter(new FileWriter("copy.txt"));

//定义一个临时变量接收 读取的字符串。 String line = null; //通过循环读取和写入。

while((line=bufr.readLine())!=null){

bufw.write(line);

bufw.newLine();//换行

bufw.flush();//刷新缓冲区。 }

} catch (IOException e) {

throw new RuntimeException("读写失败"); } finally{ try{

if(bufr!=null)

bufr.close();//指向不为空,就关闭流对象。 } catch (IOException e) {

throw new RuntimeException("读取流关闭失败"); }

try{

if(bufw!=null)

bufw.close();//指向不为空,就关闭流对象。 } catch (IOException e) {

throw new RuntimeException("写入流关闭失败"); }

}

}

}
作者: Jacky_Chen1990    时间: 2013-5-11 19:19
。。。。
作者: eycrckag    时间: 2013-5-11 19:22
呵呵,我想了很久了,找不到原因,照着视频打也打不出来结果
作者: Jacky_Chen1990    时间: 2013-5-11 19:27
本帖最后由 Jacky_Chen1990 于 2013-5-11 19:58 编辑

代码没有问题。如果读写失败。可能是因为在你的工程文件夹下面没有Test1.java文件。你查看下。是不是
作者: eycrckag    时间: 2013-5-11 19:40
有的,我放了个文件在里面,我也感觉代码是对的,可就是复制失败
作者: hou604720966    时间: 2013-5-11 19:44
eycrckag 发表于 2013-5-11 19:40
有的,我放了个文件在里面,我也感觉代码是对的,可就是复制失败

我在你另一个贴中回复的,看看吧
作者: Jacky_Chen1990    时间: 2013-5-11 19:49
eycrckag 发表于 2013-5-11 19:40
有的,我放了个文件在里面,我也感觉代码是对的,可就是复制失败

代码是对的。因为我这里可以运行。 兄弟 头像很帅。;P
作者: fjl_fight    时间: 2013-5-11 19:56
你的test.java文件不在ClassPath下吧,classpath就是你的项目目录,下面有src目录等,如果要复制src下的源文件需要加src/com/itheima/Test1.java文件吧,还有最有效的复制文件应该是内存映射复制,效率是最快的。
作者: Jacky_Chen1990    时间: 2013-5-11 19:58
fjl_fight 发表于 2013-5-11 19:56
你的test.java文件不在ClassPath下吧,classpath就是你的项目目录,下面有src目录等,如果要复制src下的源 ...

内存映射。。大哥!有代码吗!给个demo吧
作者: 仲伟    时间: 2013-5-11 20:06
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileReader;
import java.io.FileWriter;
public class Test7 {

/** * @param args * 编写程序拷贝一个文件, 尽量使用效率高的 方式. */

        public static void main(String[] args)  throws Exception{
               
                BufferedReader bufr = null;
                BufferedWriter bufw = null;
        //分别创建一个读取和写入流 对象和源/目的文件相关联。并加入缓冲技术。
        bufr = new BufferedReader(new FileReader("Test1.java"));
        bufw = new BufferedWriter(new FileWriter("copy.txt"));
        //定义一个临时变量接收 读取的字符串。
        String line = null; //通过循环读取和写入。
        while((line=bufr.readLine())!=null){
                        bufw.write(line);
                        bufw.newLine();//换行
                        bufw.flush();//刷新缓冲区。
        }


}

}
//我把你的代码都去掉try、catch
自己运行一下啊,系统自动提示,你就知道那里不对了啊,
应该是你的读的文件路径有问题
作者: 赵崇友    时间: 2013-5-11 20:07
首先希望楼主在发表帖子的时候能够把代码放在代码框中。然后楼主用的应该是Eclipse或是MyEclipse,如果你用EditPlus这样编写,在doc中编译运行不会有问题。而在eclipse中是不行的。
下面说下复制失败的原因:代码没有问题,问题出现在文件路径上面,你使用的是相对路径,在eclipse中运行时,会在相对应工程的路径下查找文件,所以你肯定是查找不到的了。你需要指定完整的路径名:src+包名+文件名
解决办法:1、可以使用EditPlus编写,用doc命令行来编译运行,但是要确保和你Test7同一个目录下有Test1.java文件。
             2、写完整的路径名称如我改写的代码;这是我建立的工程和包;你应该改写成你对应的路径。
              
3、最简单的就是将Test1.Java文件复制到你建立的工程的目录下。这是你运行就会成功了。而且会在该工程目录下产生一个copy.txt文件。这也可以验证,eclipse在查找文件时确实是在本工程下查找(如果你使用的相对路径的话);
  1. package cn.test;


  2. import java.io.BufferedReader;
  3. import java.io.BufferedWriter;
  4. import java.io.FileNotFoundException;
  5. import java.io.FileReader;
  6. import java.io.FileWriter;
  7. import java.io.IOException;
  8. public class Test7 {

  9.                 /** * @param args * 编写程序拷贝一个文件, 尽量使用效率高的 方式. */
  10.         public static void main(String[] args) { // TODO Auto-generated method stub
  11.                 BufferedReader bufr = null;
  12.                 BufferedWriter bufw = null;


  13.          //分别创建一个读取和写入流 对象和源/目的文件相关联。并加入缓冲技术。
  14.                 try {
  15.                          bufr = new BufferedReader(new FileReader<strong>("src\\cn\\test\\Test1.java"));</strong>
  16.                          }
  17.                 catch (FileNotFoundException e) {
  18.                 // TODO Auto-generated catch block
  19.                 e.printStackTrace();
  20.                 }
  21.                 try {
  22.                         bufw = new BufferedWriter(new FileWriter<strong>("src\\cn\\test\\copy.txt"));</strong>
  23.                 } catch (IOException e) {
  24.                 // TODO Auto-generated catch block
  25.                         e.printStackTrace();
  26.                 }


  27.                 //定义一个临时变量接收 读取的字符串。
  28.                 String line = null;
  29.                 //通过循环读取和写入。

  30.                 try {
  31.                         while((line=bufr.readLine())!=null){
  32.         
  33.                                 bufw.write(line);
  34.         
  35.                                 bufw.newLine();//换行
  36.         
  37.                                 bufw.flush();//刷新缓冲区。
  38.         
  39.                                 }
  40.                         } catch (IOException e) {
  41.                                 // TODO Auto-generated catch block
  42.                                 e.printStackTrace();
  43.                                 }
  44.                         finally{
  45.                                 if(bufr!=null)
  46.                                         try {
  47.                                                 bufr.close();
  48.                                         } catch (IOException e) {
  49.                                                 // TODO Auto-generated catch block
  50.                                                 e.printStackTrace();
  51.                                         }//指向不为空,就关闭流对象。

  52.                                 if(bufw!=null)
  53.                                         try {
  54.                                                 bufw.close();
  55.                                         } catch (IOException e) {
  56.                                                 // TODO Auto-generated catch block
  57.                                                 e.printStackTrace();
  58.                                         }
  59.                                 }
  60.                 }
  61. }

复制代码

作者: 赵崇友    时间: 2013-5-11 20:10
fjl_fight 发表于 2013-5-11 19:56
你的test.java文件不在ClassPath下吧,classpath就是你的项目目录,下面有src目录等,如果要复制src下的源 ...

内存映射。。对于零基础的俺是个新词
作者: eycrckag    时间: 2013-5-11 20:36
学习了,谢谢大家了




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