黑马程序员技术交流社区
标题:
大家帮忙改下代码
[打印本页]
作者:
邱成
时间:
2012-7-31 12:59
标题:
大家帮忙改下代码
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.Scanner; public class CopyTest {
public static void main(String[] args) throws IOException {
Scanner input=new Scanner(System.in);
String str,straim;
System.out.print("请输入您要拷贝的源文件:");
str=input.next();
File file=new File(str);
if(file.exists()){
System.out.print("请输入您要拷贝的目标位置:");
straim=input.next();
}
else{
System.out.println("源文件未找到!");
return;
}
FileReader fr=new FileReader(file);
BufferedReader br=new BufferedReader(fr);
FileWriter fw=new FileWriter(straim);
BufferedWriter bw=new BufferedWriter(fw);
String line=br.readLine();
while(line!=null){
bw.write(line);
br.readLine();
}
bw.flush();
fw.flush();
fr.close();
br.close();
fw.close();
bw.close();
} }
作者:
王志明
时间:
2012-7-31 13:30
我改了一处,可以了,失败的原因是你br.readLine()后没有将读取到的数据交给line,line永远不为空,导致了死循环
package test4;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.Scanner;
public class Test3 {
public static void main(String[] args) throws IOException {
Scanner input = new Scanner(System.in);
String str, straim;
System.out.print("请输入您要拷贝的源文件:");
str = input.next();
File file = new File(str);
if (file.exists()) {
System.out.print("请输入您要拷贝的目标位置:");
straim = input.next();
} else {
System.out.println("源文件未找到!");
return;
}
FileReader fr = new FileReader(file);
BufferedReader br = new BufferedReader(fr);
FileWriter fw = new FileWriter(straim);
BufferedWriter bw = new BufferedWriter(fw);
String line = br.readLine();
while (line != null) {
bw.write(line);
// 楼主你在这里出错了,br.readLine()读取数据后你什么都没做,你应该把数据交给line才对啊
// br.readLine(); ——————》 改成下面的就可以了
line = br.readLine();
}
bw.flush();
fw.flush();
fr.close();
br.close();
fw.close();
bw.close();
}
}
复制代码
作者:
涂金哲
时间:
2012-7-31 13:32
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.Scanner; public class Test {
public static void main(String[] args) throws IOException {
Scanner input=new Scanner(System.in);
String str,straim;
System.out.print("请输入您要拷贝的源文件:");
str=input.next();
File file=new File(str);
if(file.exists()){
System.out.print("请输入您要拷贝的目标位置:");
straim=input.next();
}
else{
System.out.println("源文件未找到!");
return;
}
FileReader fr=new FileReader(file);
BufferedReader br=new BufferedReader(fr);
FileWriter fw=new FileWriter(straim);
BufferedWriter bw=new BufferedWriter(fw);
String line=null;
while((line=br.readLine())!=null){//
你的程序这里是个死循环,它读了第一行后就反复的去写
bw.write(line);
bw.newLine();
}
bw.flush();
fr.close();
br.close();
fw.close();
bw.close();
}
}
作者:
金龙
时间:
2012-7-31 13:53
这个程序只能复制文本的文件,下面是修改后的代码
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.Scanner;
public class CopyTest {
public static void main(String[] args) throws IOException {
Scanner input = new Scanner(System.in);
String str, straim;
System.out.print("请输入您要拷贝的源文件:");
str = input.next();
File file = null;//由于可能是不存在的,需要赋值,所以在外面创建为空,里面直接赋值。
while (true) {
file = new File(str);//这是重新给file赋值的动作
if (file.exists()) {
System.out.print("请输入您要拷贝的目标位置:");
straim = input.next();
break;//如果正确,结束循环。
} else {
System.out.println("源文件未找到!请重新输入");// 每次输入目标错误都要求重新输入,直到正确。
str = input.next();//这是重新赋值的动作。
}
}
FileReader fr = new FileReader(file);
BufferedReader br = new BufferedReader(fr);
FileWriter fw = new FileWriter(straim);
BufferedWriter bw = new BufferedWriter(fw);
String line = null; // 这里设置为null
while ((line = br.readLine()) != null)// line应该每次在这里都要重新赋值为br.readLine(),并判断不能为空
{
bw.write(line);
bw.newLine(); // 每一行复制完毕都要新起一行
// br.readLine();
bw.flush(); // 在循环里刷新
}
// fw.flush(); 缓冲流在操作输出流,所以fw不需要刷新
// fr.close(); 关闭缓冲流即可,不需要。
bw.close(); // 先关输出流
br.close(); // 后关输入流
// fw.close(); 关闭缓冲流即可,不需要。
System.out.println("感谢使用,复制完成");
}
}
作者:
陈红建
时间:
2012-7-31 14:39
直接修改成这样算了
import java.io.*;
import java.util.*;
class MyBufferInputStream
{
private InputStream in;
private byte buf[]=new byte[1024*20];
private int pos=0,count=0;
MyBufferInputStream(InputStream in)
{
this.in=in;
}
//一次读一个字节,从缓冲区(字节数组)获取
public int myRead() throws IOException
{
if(count==0)
{
count=in.read(buf);
if(count<0)
return -1;
pos=0;
byte b=buf[pos];
count--;
pos++;
return b&255;
}
else if(count>0)
{
byte b=buf[pos];
count--;
pos++;
return b&0xff;
}
return -1;
}
public void MyClose() throws IOException
{
in.close();
}
}
class FileCopy
{
//字节流的方式不仅可以拷贝普通文件,还可以拷贝任意的二进制文件例如exe文件
public static void main(String[] args) throws IOException
{ System.out.printf("请输入源文件,与目的地:");
Scanner input=new Scanner(System.in);
String name=input.next();
String name1=input.next();
long start=System.currentTimeMillis();
FileCopyBuffer(name,name1);//FileCopyBuffer(源文件,目标位置)
long end=System.currentTimeMillis();
System.out.println((end-start)+"毫秒");
}
public static void FileCopyBuffer(String name,String name2) throws IOException
{
MyBufferInputStream fr= new MyBufferInputStream(new FileInputStream(name));
BufferedOutputStream fw= new BufferedOutputStream(new FileOutputStream(name2));
int byte1=0;
while((byte1=fr.myRead())!=-1)
{
fw.write(byte1);
}
fr.MyClose();
fw.close();
}
}
复制代码
作者:
王峰
时间:
2012-7-31 17:24
楼主我给你改正确了,你看我的截图注释。。。。。。。
dd.jpg
(91.09 KB, 下载次数: 27)
下载附件
2012-7-31 17:23 上传
修改正确的截图,请看注释行
作者:
hello world
时间:
2012-7-31 20:44
import java.io.*;
public class Copy{
public static void main(String[] args){
try{
File sourceFile=new File("E:/java练习/HalfFind.java");
if(!sourceFile.exists()){
System.out.println("source file not exist");
}
File destinationFile=new File("E:/java练习/HalfFindCopy.java");
if(destinationFile.exists()){
System.out.println("destination file already exist");
}
BufferedInputStream input=
new BufferedInputStream(new FileInputStream(sourceFile));
BufferedOutputStream output=
new BufferedOutputStream(new FileOutputStream(destinationFile));
int r;
while((r=input.read())!=-1){
output.write((byte)r);
}
input.close();
output.close();
System.out.println("Copy Finish");
}catch(IOException e){
e.printStackTrace();
}
}
}
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2