Io 在java中使用FileVisitor的正确方法

Io 在java中使用FileVisitor的正确方法,io,java-7,filevisitor,Io,Java 7,Filevisitor,我试图一步一步地通过一个完整的路径和它的单层子目录。对于每个文件,我需要读取五个数据字段并将它们输出到一个带分隔符的文本文件中。我能够从单个文本文件中读取内容,并在屏幕上验证我的输出;在那之后,我陷入困境。我似乎找不到FileVisit的正确参数。下面我的代码中有一些具体的问题。虽然我还没有说得那么清楚,但是我想了解一下写入输出文件的方法,也就是说,我想放在哪个地方是最符合逻辑的 我已经在文件访问者上查看了和JavaDocs的信息 . 但是,我仍然无法使FileVisitor正常工作 @波希米亚

我试图一步一步地通过一个完整的路径和它的单层子目录。对于每个文件,我需要读取五个数据字段并将它们输出到一个带分隔符的文本文件中。我能够从单个文本文件中读取内容,并在屏幕上验证我的输出;在那之后,我陷入困境。我似乎找不到FileVisit的正确参数。下面我的代码中有一些具体的问题。虽然我还没有说得那么清楚,但是我想了解一下写入输出文件的方法,也就是说,我想放在哪个地方是最符合逻辑的

我已经在文件访问者上查看了和JavaDocs的信息
. 但是,我仍然无法使FileVisitor正常工作

@波希米亚人建议将
接口
更改为
,我已经这样做了

 import java.nio.files.*;
 public class FileVisitor<T> 
 {
      Path startPath = Paths.get("\\CallGuidesTXT\\");
      Files.walkFileTree(startPath, new SimpleFileVisitor(startPath))
      \\             ^^^^^^    
      \\ errors out, <identifier expected>          
          { 
          @Override
          public FileVisitResult visitFile(Path file, BasicFileAttributes attrs)
              throws IOException
          {
              Files.list(file);
              return FileVisitResult.CONTINUE;
          }
        // do my file manipulations here, then write the delimited line 
        // of text to a CSV fle...is this the most appropriate place for that 
        // operation in this sample? 
      }  
 }
导入java.nio.files.*;
公共类文件访问者
{
路径起始路径=路径。获取(\\\CallGuidesTXT\\”;
Files.walkFileTree(startPath,新的SimpleFileVisitor(startPath))
\\             ^^^^^^    
\\出错,
{ 
@凌驾
公共文件VisitResult visitFile(路径文件,基本文件属性属性属性)
抛出IOException
{
文件列表(文件);
返回FileVisitResult.CONTINUE;
}
//在此处执行文件操作,然后写入分隔行
//将文本转换为CSV fle…这是最合适的位置吗
//此示例中的操作?
}  
}
下面是SSCCE…但上面版本中的评论指出了我的具体问题

 import java.nio.*;
 import java.util.*;
 public class FileVisitor<T>
 {
    Path startPath = Paths.get("\\CallGuidesTXT\\");
 }
 Files.walkFileTree(startPath, new SimpleFileVisitor(startPath)  {
      @Override
      public FileVisitResult visitFile(Path file, BasicFileAttributes attrs)
          throws IOException {
          Files.list(file);
          return FileVisitResult.CONTINUE;
      } 
 });
import java.nio.*;
导入java.util.*;
公共类文件访问者
{
路径起始路径=路径。获取(\\\CallGuidesTXT\\”;
}
Files.walkFileTree(startPath,新的SimpleFileVisitor(startPath){
@凌驾
公共文件VisitResult visitFile(路径文件,基本文件属性属性属性)
抛出IOException{
文件列表(文件);
返回FileVisitResult.CONTINUE;
} 
});

Java
接口
可以具有任何实现(即代码)-仅方法签名

尝试将
接口
更改为

public class FileVisitor<T> {
    ...
公共类FileVisitor{
...

现在回答您修改后的帖子

您的括号放错了位置:

Files.walkFileTree(startPath, new SimpleFileVisitor(startPath) { 
      @Override
      public FileVisitResult visitFile(Path file, BasicFileAttributes attrs)
          throws IOException {
          Files.list(file);
          return FileVisitResult.CONTINUE;
      }
  });

我在
新的SimpleFileVisitor(startPath)
后面移动了括号,将
visitFile
方法括起来。这里有一个-这是您“动态”提供实现的地方。

我对Java有点生疏,但我想大致了解一下您的目标:

import java.nio.files.*;
public class MyDirectoryInspector extends Object 
{
    public static void main(String[] args) {
        Path startPath = Paths.get("\\CallGuidesTXT\\");
        Files.walkFileTree(startPath, new SimpleFileVisitor<Path>() { 
            @Override
            public FileVisitResult visitFile(Path file, BasicFileAttributes attrs)
                throws IOException
            {
                String firstLine = Files.newBufferedReader(file, Charset.defaultCharset()).readLine();
                System.out.println(firstLine);
                return FileVisitResult.CONTINUE;
            }
        }); // <- you were missing a terminating ");"
    }
}

在不使用泛型的情况下,您必须将文件参数声明为对象类型,并在以后选择使用它时强制转换它。通常,您不想用类定义替换接口定义,或者混淆两者,因为它们用于完全不同的目的。

是否应该是
import java.nio.file.
,而不是
>文件。*
?你把代码放在一个界面中;这不起作用。@Bohemian绝妙的提示。第一次在代码中看到界面……但是有更多错误……现在正在修改我的初始帖子。哇……谢谢,@Cliff。这帮了大忙。这是我第一次使用界面,我不太清楚如何使用它们有一个问题不清楚:当你引用
时,尖括号中是否有一个明确编码的路径?一个代表路径的变量名(在本例中,
startPath
或实际上是单词
path
。如果是后者,我们是否使用
文件.walkFileTree…
station将
path
传递给SimpleFileVisitor方法?只是试图理解这意味着什么以及它的值如何通过各种类/方法移动。尖括号中的是Java泛型语法。它用于将实例限定为特定类型。换句话说,在访问者模板中看到泛型“T”的任何地方被替换为该类型。虽然泛型的意思是好的,但它确实是一个复杂的野兽。让我在没有泛型的情况下做一个修订,让它变得简单一点。谢谢,@Cliff。现在我甚至理解了代码!:)我将等待深入研究泛型,直到我不再是java新手…再次感谢。
import java.nio.files.*;
public class MyDirectoryInspector extends Object 
{
    public static void main(String[] args) {
        Path startPath = Paths.get("\\CallGuidesTXT\\");
        Files.walkFileTree(startPath, new SimpleFileVisitor<Path>());
    }
}

public class SimpleFileVisitor<Path>()) { 
            @Override
            public FileVisitResult visitFile(Path file, BasicFileAttributes attrs)
                throws IOException
            {
                String firstLine = Files.newBufferedReader(file, Charset.defaultCharset()).readLine();
                System.out.println(firstLine);
                return FileVisitResult.CONTINUE;
            }
        }
import java.nio.files.*;
public class MyDirectoryInspector extends Object 
{
    public static void main(String[] args) {
        Path startPath = Paths.get("\\CallGuidesTXT\\");
        Files.walkFileTree(startPath, new SimpleFileVisitor());
    }
}

public class SimpleFileVisitor()) { 
            @Override
            public FileVisitResult visitFile(Object file, BasicFileAttributes attrs)
                throws IOException
            {
                String firstLine = Files.newBufferedReader((Path)file, Charset.defaultCharset()).readLine();
                System.out.println(firstLine);
                return FileVisitResult.CONTINUE;
            }
        }