java流不能解析为类型

pftdvrlh  于 2021-06-27  发布在  Java
关注(0)|答案(1)|浏览(361)

我试图编写一个脚本,查看给定目录中的所有文件,获取它们的每个路径,并将其打印到屏幕上。每当我运行我的程序,它说流不能解析为一个类型。我知道这个错误与我的变量类型有关,但我不知道要将我的变量类型改成什么。感谢您的帮助。
我的代码:

import java.nio.file.Paths;
import java.nio.file.Path;
import java.nio.file.Files;
import java.nio.stream.Stream;

class FileFinder{

    public void getFiles(){
        Path path = Paths.get("C:/Users/MYNAME/Documents/TestFiles");

        Stream<Path> subPaths = Files.walk(path);
        subPaths.forEach(System.out::println);

    }
}

错误消息:

Exception in thread "getFiles" java.lang.Error: Unresolved compilation problem: 
        Stream cannot be resolved to a type

        at FileFinder.getFiles(FileFinder.java:12)
v8wbuo2f

v8wbuo2f1#

错误的流

你有一个 java.nio.stream.Stream . 但你需要一个进口 java.util.stream.Stream .
的javadoc Files.walk 告诉我们该方法返回 java.util.stream.Stream<Path> 对象。

import java.util.stream.Stream;

关闭i/o流

顺便说一下 Stream 对象实现 AutoCloseable . 因此,您可以使用try with resources语法来确保它以某种方式正确关闭。
虽然关闭某些类型的流可能是不必要的,但是应该关闭涉及i/o的流。我想这包括你的 Files.walk 溪流。
引用 Stream 接口javadoc:
大多数流示例在使用后实际上不需要关闭,因为它们由集合、数组或生成函数支持,不需要特殊的资源管理。通常,只有源是io通道的流(如files.lines(path)返回的流)才需要关闭。如果流确实需要关闭,则必须将其作为try with resources语句或类似控制结构中的资源打开,以确保在其操作完成后立即关闭。

基本代码示例

Path path = Paths.get( "/Users/basilbourque/stuff" );
        try (
                Stream < Path > subPaths = Files.walk( path ) ;
        )
        {
            subPaths.forEach( System.out :: println );
        }
        catch ( IOException e )
        {
            e.printStackTrace();
        }

完整示例代码应用程序

这是一个完整的应用程序,包括 import 声明。

package work.basil.example;

import java.io.IOException;
import java.nio.file.Paths;
import java.nio.file.Path;
import java.nio.file.Files;
import java.util.stream.Stream;

public class FileFinder
{
    public void walkFiles ( )
    {
        Path path = Paths.get( "/Users/basilbourque/stuff" );
        try (
                Stream < Path > subPaths = Files.walk( path ) ;
        )
        {
            subPaths.forEach( System.out :: println );
        }
        catch ( IOException e )
        {
            e.printStackTrace();
        }
    }

    public static void main ( String[] args )
    {
        FileFinder app = new FileFinder();
        app.demo();
    }

    private void demo ( )
    {
        this.walkFiles();
    }
}

运行时:

/Users/basilbourque/stuff
/Users/basilbourque/stuff/some_text.txt
/Users/basilbourque/stuff/slow-draft.txt
/Users/basilbourque/stuff/text.txt

相关问题