当前位置: 首页 > 知识库问答 >
问题:

如何获得字符串数组使用Files.list()

周枫涟
2023-03-14

我有一个带有字符串的txt文件。

我想通过Files.list(Paths.get("路径"))方法获得包含文件中所有行的String数组。

我试图使用toArray(),但它返回一个指向“path”目录中文件的路径数组

如何使用文件获取它。列表(path.get(“path”))(这是必需的)?

我有这样的想法:

public Object[] returnStrings(){
    Object[] strings;
    try {
        strings = Files.list(Paths.get(path)).toArray();
    }catch (IOException ex){
        return null;
    }
    return strings;
}

共有1个答案

壤驷茂实
2023-03-14

文件。list()需要一个指向目录的路径作为参数,它将为您提供此目录中包含的path对象(如果有)流。您无法使用文件获取文件的内容。list()

要从文本文件中读取,请使用Files.lines()。与将所有文件内容转储到内存中的Files.readAllLines()相反,由Files.lines()生成的流将被懒惰地填充。因此,这是从文件中读取的首选方式,尤其是当您不知道文件的大小时。

使用Files.lines()可以这样实现:

public static String[] readFromFile(Path path) {
    String[] result;
    try(Stream<String> stream = Files.lines(path, StandardCharsets.UTF_8)) {
        result = stream.toArray(String[]::new);
    } catch (IOException e) {
        result = new String[0];
    }
    return result;
}

代码中有几个重要问题:

  • 您没有关闭资源。因为流正在访问文件,所以必须在finally块内显式关闭它,或者使用try with resources关闭它,如上所示(这是首选且更简洁的方式)

最后,有几点建议:

  • 避免将return语句放在trycatch块中,这样会降低可读性
  • 列表是比数组更方便、更灵活的数据容器。如果不处理需要数组的现有代码,请使用List
 类似资料:
  • 我的代码返回网页上的所有链接,但当我在谷歌上搜索某些东西时,例如“android”,我想获取第一个链接。我该怎么做? 这是我的代码

  • 我正在使用Postman向web API发送字符串数组。web API方法如下所示: Fiddler显示请求的内容类型为 但是我得到一个错误的响应: {"Message":"此资源不支持请求实体的媒体类型'Multipart/form-data'。","ExceptionMessage":"没有MediaTypeForall可用于从媒体类型'Multipart/form-data'的内容中读取类型

  • 问题解决 将XmlElementRef注释更改为@XmlElementRef(name=“Option”,type=Option.class,required=false)后,将@XmlRootElement(name=“Option”)添加到选项中。班 更新: 根据laune的建议,我添加了两个类(Options和Option),并修改了GuimopProperties类,如下所示 但当我必须新

  • 我有一个带有字符串的txt文件。我想通过文件获取包含文件中所有行的字符串数组。list(path.get(“path”))方法。 我试图使用toArray(),但它返回指向“path”目录中文件的路径数组 如何使用文件获取它。列表(路径。获取(“路径”))(这是必需的)?我有类似的东西

  • 如果我尝试实现一个自定义转换器(我在网上找到了一些例子),它会抱怨我没有实现抽象方法convert(F),而这些例子都没有实现。 谢了。

  • 我有一个字符串,它包含字节数组的元素,比如“[B@42B19E58”,我必须将它转换回字节数组。 有人能给我一个这样做的方法吗? 在这里,我不必将一个字符串转换为字节数组。我已经有字节数组元素在字符串中,我只需要把它们放回数组。