要从java中的文件类型数组创建字符串类型数组吗

要从java中的文件类型数组创建字符串类型数组吗,java,Java,我有一个文件类型数组,它被一个接一个地转换成字符串类型。现在我想制作一个包含所有转换字符串的数组。我不知道该怎么做,被困在这里 FTPFile[] files = client.list(); for (FTPFile file : files) { System.out.println(file.getName()); //How to make an array of file.getName 首先,这不是一个很好的增强for循环应用程序,它屏蔽了迭代

我有一个文件类型数组,它被一个接一个地转换成字符串类型。现在我想制作一个包含所有转换字符串的数组。我不知道该怎么做,被困在这里

 FTPFile[] files = client.list();
    for (FTPFile file : files) {
          System.out.println(file.getName());
    //How to make an array of file.getName

首先,这不是一个很好的增强for循环应用程序,它屏蔽了迭代器变量。其次,我不确定您使用的是哪个
FTPFile
实现,但假设您使用的是

String[]strings=新字符串[files.length];
对于(int i=0;i
如下所示

FTPFile[] files = client.list();
int size = files.length;
int i =0;
String a []=new String[size];

    for (FTPFile file : files) {
          System.out.println(file.getName());

           a[i] = file.getName();
           i++;
 }

只需声明一个
字符串
数组
,该数组将保存文件名,并根据索引更改
for
循环,以便为文件名数组的每个元素分配一个值

FTPFile[]files=client.list();
String[]filename=新字符串[files.length];
对于(int i=0;i
使用Java 8,您可以执行以下操作:

String[] strings = Arrays.stream(files)
        .map(FTPFile::getName)
        .toArray(String[]::new);
一点解释:

  • Arrays.stream(files)
    返回有关文件元素的
    数组
  • .map(FTPFile::getName)
    是从类型
    FTPFile
    到类型
    String
    (返回类型
    getName
    和所需的目标类型)的映射。它是通过方法引用(双冒号
    )作为lambda表达式的缩写形式完成的:
    element->element.getName()
  • .toArray(字符串[]:新建)
    创建一个新字符串[],并将流的所有元素存储在其中,再次使用方法引用(长格式为:
    size->newstring[size]
有关流的更多信息,请参见

      String[] ss = Arrays.stream(files).
              map(f -> f.getName()).
              toArray(String[]::new);

String[]
没有方法
add()
。这是一个数组,不是
列表。
。仍然存在一个问题。
i
声明在哪里,为什么允许它泄漏到循环范围之外?@hexafraction Thanx,但我需要更多了解泄漏部分,可能对其他人也有用。在这段代码中,循环结束后,
i
仍然可以访问。当您在
中声明
i
for(int i=0;…)
,则它仅在循环本身执行时在堆栈上,并且您不会冒意外混淆的风险,并在循环结束后使用它。我可以工作,但当在循环之外的其他地方使用[]时,它的给定值为null,第0位的第一个除外
      String[] ss = Arrays.stream(files).
              map(f -> f.getName()).
              toArray(String[]::new);