在Java中将File[]转换为String[]

7

我有这段代码:

File folder = new File("F:\\gals");
File[] listOfFiles = folder.listFiles();  

这段代码返回文件夹 F:\gals 中所有文件的位置数组,我试图在 Selenium 代码中使用这些位置。

driver.findElement(By.id(id1)).sendKeys(listOfFiles[1]);

我看到错误信息。
The method sendKeys(CharSequence...) in the type WebElement is not applicable for the arguments (File)

我认为我需要将listOfFiles[]转换为字符串数组,请告诉我简单的方法。谢谢。


你想要发送什么给Selenium?文件路径还是文件内容?在了解你想要实现的目标之前,listOfFiles[] --> String[] 是不清楚的。 - dubes
我想上传文件,为了上传文件,我必须发送文件路径。 - carol
6个回答

12

您不需要转换整个数组,只需调用FilegetAbsolutePath()方法即可:

driver.findElement(By.id(id1)).sendKeys(listOfFiles[1].getAbsolutePath());

但是如果您确实想要转换整个数组,这是使用Java 8执行此操作的方法(由@RemigiusStalder简化):

String listOfPaths[] = Arrays.stream(listOfFiles).map(File::getAbsolutePath)
        .toArray(String[]::new);

1
Java8代码可以简化为:String listOfPaths[] = Arrays.stream(listOfFiles).map(File::getAbsolutePath).toArray(String[]::new); - Remigius Stalder

7
只需调用File.list()即可。

@ThiagoPorciúncula,listFiles()也会这样。唯一的区别在于返回的数据类型不同。 - user207421
@ThiagoPorciúncula 我只能建议你继续阅读:'返回一个文件对象数组,每个文件或目录在目录中' [强调添加]。 - user207421

3

我认为,你不需要将File[]转换成String[]。

只需按照以下方式使用你的文件数组:

driver.findElement(By.id(id1)).sendKeys(listOfFiles[1].getName());

或者,如果您想发送完整的文件路径:

driver.findElement(By.id(id1)).sendKeys(listOfFiles[1].getPath());

2

如果你只想要名称:

String [] fileNames new String[listOfFiles.length];
  for (int i = 0; i < listOfFiles.length; i++) {
    fileNames[i] = listOfFiles[i].getName();
}

如果您需要完整路径:

String [] fileNames new String[listOfFiles.length];
  for (int i = 0; i < listOfFiles.length; i++) {
    fileNames[i] = listOfFiles[i].getPath();
}

2
另一种方法:这只是一个将File数组转换为String数组的静态助手方法。
 private static String[] convertFromFilesArray(File[] files){
        String[] result = new String[files.length];
        for (int i = 0; i<files.length; i++){
            result[i] = files[i].getAbsolutePath();
        }

        return result;
    }

1
为什么你不试试这个?
driver.findElement(By.id(id1)).sendKeys(listOfFiles[1].getName());

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接