java使用SWT filedialog复制多个文件
我正在运行一个传输文件程序,我的程序正在运行,但我遇到了一个问题,因为当我选择多个文件并将其放在textbox
上时,源目录无法读取textbox
上的内容
这是我的密码
打开文件
btnSearchFile.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(SelectionEvent e) {
FileDialog fd = new FileDialog(shell, SWT.MULTI);
Collection files = new ArrayList();
String firstFile = fd.open();
if (firstFile != null) {
String[] selectedFiles = fd.getFileNames();
File file = new File(firstFile);
for (int ii = 0; ii < selectedFiles.length; ii++ )
{
if (file.isFile())
{
displayFiles(new String[] { file.toString()});
}
else
displayFiles(file.list());
}
}
}
});
在文本框中显示文件
public void displayFiles(String[] files) {
for (int i = 0; files != null && i < files.length; i++) {
txtSource.append(files[i]);
txtSource.setEditable(false);
}
}
复制文件
public static void copyFile(File src, File dest) throws IOException
{
InputStream oInStream = new FileInputStream(src);
OutputStream oOutStream = new FileOutputStream(dest);
// Transfer bytes from in to out
byte[] oBytes = new byte[1024];
int nLength;
BufferedInputStream oBuffInputStream = new BufferedInputStream( oInStream );
while ((nLength = oBuffInputStream.read(oBytes)) > 0)
{
oOutStream.write(oBytes, 0, nLength);
}
oInStream.close();
oOutStream.close();
}
PS:一个文件是可以的,但如果选择了多个文件并放在文本框中,则无法找到源目录
# 1 楼答案
为了完全有帮助,我们可以使用一些更详细的信息(特定的异常、完整的MCVE,使用哪些SWT小部件等等)
也就是说,我认为您已经提供了足够的信息,可以看到您的代码存在一些问题:
首先,当您选择了多个文件时,会反复显示相同的文件名(第一个文件的名称)。也许这是故意的,但值得一提:
基于上下文,我假设
txtSource
是一个Text
小部件。考虑到这一点,如果我们看看你的displayFiles()
方法,你有以下几点:当你反复调用
displayFiles()
时,你会在所有其他文件名之后加上一个文件名,有效地构建一个长的String
,它是所有文件名的组合。在复制列出的文件时,将String
拆分回有效的文件路径将非常棘手我猜当你说:
。。。你只是在抓取
txtSource
的内容。比如:如果
Text
对象中只有一个文件名,这肯定会起作用,但如果有多个文件名,则会导致不存在File
例如,如果选择了两个文件:
你的
txtSource
将显示C:\Users\me\FileAC:\Users\me\FileB
。路径C:\Users\me\FileAC:\Users\me\FileB
很可能不存在在这种情况下,
new File(txtSource.getText()).exists()
将返回false
,并且在FileInputStream
的构造函数中使用该File
(在copyFile()
内)将导致FileNotFoundException
简而言之,只要确保在调用
copyFile()
并创建源File
对象时,您给出的是您认为自己是的路径,而不是所有选定文件的串联