怎样用Java复制文件到指定目录? 在线等,急!!!!

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了怎样用Java复制文件到指定目录? 在线等,急!!!!相关的知识,希望对你有一定的参考价值。

不是一个文件。该文件夹下有四个文件。要求是把他们都复制过去。该文件都是.dll的文件。不能涉及到重新编码,否则可能会引起文件错误。

借助工具包commons-io.jar
import java.io.File;
import java.io.IOException;

import org.apache.commons.io.FileUtils;

public class Admin

public static void main(String[] args)
File from = new File("d:/a");
File to = new File("d:/b");

try
FileUtils.copyDirectory(from, to);
catch (IOException e)
e.printStackTrace();


追问

这样就可以直接把整个目录里的文件都复制过去了吗?

追答

是啊,org.apache.commons.io.FileUtils里面提供好多工具方法,赋值文件夹的,文件的,你可以自己试试啊

追问

好吧 好使了。不过还有个问题,怎么做运行批处理文件啊?

追答

内容就是一组cmd命令,.具体语法你可以网上查查.应该是很多的,

将下面内容保存为一个bat文件
d:
xcopy a b
再双击就可以啦

追问

麻烦再问一个问题,就是如果写一段代码让其实现启动令一个.bat文件。

追答

Runtime.getRuntime().exec("cmd.exe /c start **.bat");

注意路径,

追问

("cmd.exe /c start **.bat");
/C 需要写的是.bat所在路径是么?

追答

这个你试下吧,
要么*.bat你写绝对路径

参考技术A java的File类对文件进行操作不涉及编码问题,只是流对象的处理而已
首先用File类定位到该文件夹,遍历dll文件为一个数组存储起来
然后循环遍历这四个文件 使用outputstream(可以加缓冲)写入你的目标文件夹

代码量不是很大 只是逻辑必须清晰

而且如果不是必须用java操作 我觉得写批处理比写java简单的多
参考技术B 如果是windows系统,直接调用copy命令不更好?如果是linxu, 可以调用cp啊

import java.io.IOException;

public class FileCopy

public static void main(String[] args)

final String src = "c:\\src";
final String desc = "c:\\desc";

try
String cmd = "cmd /c copy " + src + "\\* " + desc + "\\";
Runtime.getRuntime().exec(cmd).waitFor();
catch (IOException e)
e.printStackTrace();
catch (InterruptedException e)
e.printStackTrace();




参考技术C /**
* 拷贝一个文件到指定的文件
* @param src
* @param destDirectory
* @return
*/
public static boolean copyFileToFile(String srcfile,String destfile)

try
java.io.FileInputStream fin = new java.io.FileInputStream(srcfile);
java.io.FileOutputStream fout = new java.io.FileOutputStream(destfile);
int x = -1;
while((x=fin.read()) != -1)
fout.write(x);

fin.close();
fout.flush();
fout.close();
return true;
catch (Exception e)
// TODO Auto-generated catch block
e.printStackTrace();
System.out.println("移动文件到目标地址失败 error:" + e.getMessage());
return false;




/// 再写个方法, 拷贝整个目录中的文件,到一个目录,里面递归调用,我上面的那个方法就行了
参考技术D 这么大的代码估计没人会写的
要么就是在别的地方粘贴的

提示你使用输入输出流。自己可以实践一下。
注意内存溢出就行了追问

我写了一下,也是参考别人的。但是好像是把源文件给重新编码了。而且复制后的文件大小也不一样了。我觉得好像还是有些问题。而且我那个写的是传一个文件。但是我想要达到的效果是将指定目录下的文件都传过去。

追答

java可以遍历文件夹中的全部文件

你在复制的时候,可以遍历文件夹,然后使用循环将每一个文件都拷贝过去

使用文件流不会重新编译呀?

不知道哪里出现的错误

java图形界面怎样将文本文件里的数据输入到文本框和将文本框中的数据输入到文本文件 急求解在线等可加分

import java.awt.HeadlessException;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;import java.awt.HeadlessException;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.HeadlessException;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;import java.awt.HeadlessException;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextField;

import com.action.JframBank;

/**
* 查询界面
*
* @author Administrator
*
*/
public class BTN1 extends JFrame
private JButton btn1, btn2;
private JTextField t1;
private JPanel b1 = new JPanel();
private JframBank jfb = null;
public BTN1(String arg0) throws HeadlessException
super(arg0);
setSize(300, 200);
t1=new JTextField(15);
b1.setName("查询");
btn1 = new JButton("查询余额");
btn1.addActionListener(new B());
btn2 = new JButton("退出");
btn2.addActionListener(new B());
b1.add(btn1);
b1.add(btn2);
b1.add(t1);
setContentPane(b1);
this.setVisible(true);

public JTextField getT1()
return t1;

class B implements ActionListener
public void actionPerformed(ActionEvent arg0)
Object o = arg0.getSource();
if (o == btn1)
Query query = new Query();
query.query(jfb);

if (o == btn2)
jfb.setVisible(true);




import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import javax.swing.JTextField;
/**
* 查询
* @author Administrator
*
*/
public class Query
private JframBank jframBank;
private JTextField jTextField;
public void query(JframBank jframBank)
this.jframBank=jframBank;
// FileReader fin=null;
try
// fin=new FileReader("D:/1.txt");
BufferedReader Ia=new BufferedReader(new InputStreamReader(new FileInputStream("D:/1.txt")));
try
String a=Ia.readLine();
Ia.close();
jTextField=jframBank.getBt1().getT1();
jTextField.setText(a);
catch (IOException e)
// TODO Auto-generated catch block
e.printStackTrace();

catch (FileNotFoundException e)
// TODO Auto-generated catch block
e.printStackTrace();


首先
query.query(jfb);这一行 你传了个null给query方法。这样肯定是不行的
必须实例化一个对象 new JFramebank...
还有
jTextField=jframBank.getBt1().getT1();
这地方 我不知道你的JFramBank是怎么写的 我的理解是你要把读出的数据赋给jtextFeild
那就不必传jframBank,只需要传this就行。query.query(this)
this.getT().setText(a);
这样设置肯定会一行覆盖一行的 所以你最终看到的是最后一行数据
参考技术A 就是一个文本文件的读写啊,用FileInPutStream

以上是关于怎样用Java复制文件到指定目录? 在线等,急!!!!的主要内容,如果未能解决你的问题,请参考以下文章

oracle怎样建立一个一模一样的表,急~在线等

急急急 用java 怎么写lotus 的domino数据库多条件查询 包含时间段查询 在线等

在线等:怎样用javascript实现往指定的div中输入星号图案

怎样在把一个java的一个方法发布成可以供其他系统调用的webservice呢?急!在线等!!!

xcopy怎么复制

Excel 怎样批量添加逗号 急 在线等