在 java 中移动大文件
Moving large files in java
我必须将文件从一个目录移动到另一个目录。
正在使用 属性 文件。所以源路径和目标路径存储在 属性 文件中。
我也有 属性 reader class。
在我的源目录中有很多文件。如果一个文件完成操作,应该移动到另一个目录。
文件大小超过 500MB。
import java.io.File;
import java.nio.file.Files;
import java.nio.file.StandardCopyOption;
import static java.nio.file.StandardCopyOption.*;
public class Main1
{
public static String primarydir="";
public static String secondarydir="";
public static void main(String[] argv)
throws Exception
{
primarydir=PropertyReader.getProperty("primarydir");
System.out.println(primarydir);
secondarydir=PropertyReader.getProperty("secondarydir");
File dir = new File(primarydir);
secondarydir=PropertyReader.getProperty("secondarydir");
String[] children = dir.list();
if (children == null)
{
System.out.println("does not exist or is not a directory");
}
else
{
for (int i = 0; i < children.length; i++)
{
String filename = children[i];
System.out.println(filename);
try
{
File oldFile = new File(primarydir,children[i]);
System.out.println( "Before Moving"+oldFile.getName());
if (oldFile.renameTo(new File(secondarydir+oldFile.getName())))
{
System.out.println("The file was moved successfully to the new folder");
}
else
{
System.out.println("The File was not moved.");
}
}
catch (Exception e)
{
e.printStackTrace();
}
}
System.out.println("ok");
}
}
}
我的代码没有将文件移动到正确的路径。
这是我的 属性 文件
primarydir=C:/Desktop/A
secondarydir=D:/B
enter code here
文件应该在B盘。怎么做?任何人都可以帮助我..!!
代码 - java 方法:
/**
* copy by transfer, use this for cross partition copy,
* @param sFile source file,
* @param tFile target file,
* @throws IOException
*/
public static void copyByTransfer(File sFile, File tFile) throws IOException {
FileInputStream fInput = new FileInputStream(sFile);
FileOutputStream fOutput = new FileOutputStream(tFile);
FileChannel fReadChannel = fInput.getChannel();
FileChannel fWriteChannel = fOutput.getChannel();
fReadChannel.transferTo(0, fReadChannel.size(), fWriteChannel);
fReadChannel.close();
fWriteChannel.close();
fInput.close();
fOutput.close();
}
该方法使用nio,它使用os底层操作来提高性能。
导入代码如下:
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.nio.ByteBuffer;
import java.nio.channels.FileChannel;
如果你在eclipse中,就用ctrl + shift + o
.
改变这个:
oldFile.renameTo(new File(secondarydir+oldFile.getName()))
为此:
oldFile.renameTo(new File(secondarydir, oldFile.getName()))
最好不要使用字符串连接来连接路径段,因为正确的连接方式可能取决于平台。
编辑: 如果可以使用 JDK 1.7 API,则可以使用 Files.move()
而不是 File.renameTo()
我必须将文件从一个目录移动到另一个目录。
正在使用 属性 文件。所以源路径和目标路径存储在 属性 文件中。 我也有 属性 reader class。
在我的源目录中有很多文件。如果一个文件完成操作,应该移动到另一个目录。
文件大小超过 500MB。
import java.io.File;
import java.nio.file.Files;
import java.nio.file.StandardCopyOption;
import static java.nio.file.StandardCopyOption.*;
public class Main1
{
public static String primarydir="";
public static String secondarydir="";
public static void main(String[] argv)
throws Exception
{
primarydir=PropertyReader.getProperty("primarydir");
System.out.println(primarydir);
secondarydir=PropertyReader.getProperty("secondarydir");
File dir = new File(primarydir);
secondarydir=PropertyReader.getProperty("secondarydir");
String[] children = dir.list();
if (children == null)
{
System.out.println("does not exist or is not a directory");
}
else
{
for (int i = 0; i < children.length; i++)
{
String filename = children[i];
System.out.println(filename);
try
{
File oldFile = new File(primarydir,children[i]);
System.out.println( "Before Moving"+oldFile.getName());
if (oldFile.renameTo(new File(secondarydir+oldFile.getName())))
{
System.out.println("The file was moved successfully to the new folder");
}
else
{
System.out.println("The File was not moved.");
}
}
catch (Exception e)
{
e.printStackTrace();
}
}
System.out.println("ok");
}
}
}
我的代码没有将文件移动到正确的路径。
这是我的 属性 文件
primarydir=C:/Desktop/A
secondarydir=D:/B
enter code here
文件应该在B盘。怎么做?任何人都可以帮助我..!!
代码 - java 方法:
/**
* copy by transfer, use this for cross partition copy,
* @param sFile source file,
* @param tFile target file,
* @throws IOException
*/
public static void copyByTransfer(File sFile, File tFile) throws IOException {
FileInputStream fInput = new FileInputStream(sFile);
FileOutputStream fOutput = new FileOutputStream(tFile);
FileChannel fReadChannel = fInput.getChannel();
FileChannel fWriteChannel = fOutput.getChannel();
fReadChannel.transferTo(0, fReadChannel.size(), fWriteChannel);
fReadChannel.close();
fWriteChannel.close();
fInput.close();
fOutput.close();
}
该方法使用nio,它使用os底层操作来提高性能。
导入代码如下:
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.nio.ByteBuffer;
import java.nio.channels.FileChannel;
如果你在eclipse中,就用ctrl + shift + o
.
改变这个:
oldFile.renameTo(new File(secondarydir+oldFile.getName()))
为此:
oldFile.renameTo(new File(secondarydir, oldFile.getName()))
最好不要使用字符串连接来连接路径段,因为正确的连接方式可能取决于平台。
编辑: 如果可以使用 JDK 1.7 API,则可以使用 Files.move()
而不是 File.renameTo()