Java 多重';如果';语句转换为一个输出流

Java 多重';如果';语句转换为一个输出流,java,file-io,if-statement,compiler-errors,Java,File Io,If Statement,Compiler Errors,嘿,上面的编码有点问题,希望这里的人能帮上忙。这是代码的一个部分版本,因为真正的版本还涉及4条if/elseif语句 程序编译并开始正常运行。它从文件中返回几个结果,这些结果在input2中被再次读入/读出,但随后停止,不再产生结果,并给出错误: 线程“main”java.io.EOFException中出现异常 位于java.io.DataInputStream.readUnsignedShort(DataInputStream.java:323) 位于java.io.DataInputStr

嘿,上面的编码有点问题,希望这里的人能帮上忙。这是代码的一个部分版本,因为真正的版本还涉及4条if/elseif语句

程序编译并开始正常运行。它从文件中返回几个结果,这些结果在input2中被再次读入/读出,但随后停止,不再产生结果,并给出错误:

线程“main”java.io.EOFException中出现异常 位于java.io.DataInputStream.readUnsignedShort(DataInputStream.java:323) 位于java.io.DataInputStream.readUTF(DataInputStream.java:572) 位于java.io.DataInputStream.readUTF(DataInputStream.java:547) 位于YDSearch.listFiles(YDSearch.java:85) 位于YDSearch.main(YDSearch.java:93)

有人知道为什么会发生这种情况,并且有一个解决方案可以分享吗? 我还尝试将变量“b”放在if语句中,但由于作用域的原因,这不起作用。如果b是由If定义的,那么只需要一个If语句就可以输出到文件中


如果您有任何想法,请告诉我,我将非常感谢:)

据我所知,您并不总是为每个名称输出一个输出记录,仅当名称与您的某个模式匹配时。但是,您确实尝试读取每个名称的输入记录

因此,如果您有任何与模式不匹配的文件名,那么您尝试读多于写,您将获得EOF

编辑:


更详细地说,问题是您会得到一个以“mp3”、“mp4”、“3gp”、“mov”、“avi”或“wmv”结尾的所有文件的列表。然后处理该列表,并将每个“mp3”和“mp4”的内容写入
C:/Users/Jonathan/Desktop/ReadyForAnalysis.dat
“档案。然后,假设对于文件列表中的每个条目,您将在
ReadyForAnalysis.dat
中有一个条目。但是,如果有任何以“3gp”、“mov”、“avi”或“wmv”结尾的文件“那么这将不成立。

您假定文件名中的条目数与找到的.mov和.mp3文件数相同。很可能他们会有所不同。对不起,这可能只是我的愚蠢。是的,它编译得很好,错误出现在运行时。我尝试更改for循环,该循环表示for(字符串名称:filenames){System.out.println(input2.readUTF()+“\n”);},但我不知道还能在for()中放什么?程序会在特定文件夹位置搜索程序中显示的6种媒体类型的所有文件。然后使用“writeUTF”将包含找到的文件的数组读入“output”。因此,“输出”文件应包含特定目录中的所有媒体文件。从这里开始,根据文件类型读入n个字节。所以在程序的这一点上,没有发生过滤,所以这不是很好吗?对,我现在有点明白你的意思了。我需要找到一种方法来放置System.out.println(input2.readUTF()+“\n”);现在在for/while循环中。我删除了第二个for循环,并将其替换为多个System.out.println(input2.readUTF()+“\n”);对于文件中的数据,如您所说,并进行了实验,以了解如果我只是将这些数据加载到文件中会发生什么情况(它会产生相同的错误,所以是的,我现在了解您了)谢谢:)
import java.io.*;
import java.io.File;
import java.io.FilenameFilter;

public class YDSearch{
    public void listFiles(String dir) throws IOException{

    File directory = new File(dir);
    if (!directory.isDirectory()) {
      System.out.println("No directory provided");
      return;
    }
    //create a FilenameFilter and override its accept-method

    FilenameFilter filefilter = new FilenameFilter() {

      public boolean accept(File dir, String name) {
        //if the file extension is .mp3 return true, else false
        return name.endsWith(".mp3")||name.endsWith(".mp4")||name.endsWith(".3gp")
            ||name.endsWith(".mov")||name.endsWith(".avi")||name.endsWith(".wmv");
      }
    };
    String[] filenames = directory.list(filefilter);

    DataOutputStream output = new DataOutputStream(new FileOutputStream("C:/Users/Jonathan/Desktop/YouDetect/SearchByFileType/AllMediaFiles.dat"));

    for (String name : filenames) {
      output.writeUTF(dir + name);
    }
    output.close();

    DataInputStream input = new DataInputStream(new FileInputStream("C:/Users/Jonathan/Desktop/YouDetect/SearchByFileType/AllMediaFiles.dat"));
    DataOutputStream output2 = new DataOutputStream(new FileOutputStream("C:/Users/Jonathan/Desktop/ReadyForAnalysis.dat"));
    for (String name : filenames) {
    FileInputStream in = new FileInputStream(input.readUTF());
        int byteCounter = 0;
        int rowCounter = 0;
        long bufferCounter = 0;
        if(name.endsWith(".mp3")){
            byte[] b = new byte[36];
            int read = in.read(b, 0, 36);
            if (byteCounter != 1000){
                if (rowCounter == 1){
                    System.out.println("\n");
                    rowCounter = 0;
                }
                output2.writeUTF(org.apache.commons.codec.binary.Hex.encodeHexString(b)+ " " + dir + name);
                bufferCounter ++;
                rowCounter ++;
            }else{
                    byteCounter = 0;
                    try{
                        Thread.sleep(200);
                    }catch(InterruptedException e) {
                    }
            }
        }
        else if(name.endsWith(".mp4")){
            byte[] b = new byte[29];
            int read = in.read(b, 0, 29);

            if (byteCounter != 1000){
                if (rowCounter == 1){
                    System.out.println("\n");
                    rowCounter = 0;
                }
                output2.writeUTF(org.apache.commons.codec.binary.Hex.encodeHexString(b)+ " " + dir + name);
                bufferCounter ++;
                rowCounter ++;
            }else{
                    byteCounter = 0;
                    try{
                        Thread.sleep(200);
                    }catch(InterruptedException e) {
                    }
            }
        }
        //System.out.println("====================");
    }
    output2.close();
    input.close();

    DataInputStream input2 = new DataInputStream(new FileInputStream("C:/Users/Jonathan/Desktop/ReadyForAnalysis.dat"));
    for (String name : filenames) {
    System.out.println(input2.readUTF()+"\n");
    }
}
  public void checkHeaderSC(String allFiles)throws IOException{
  }

  public static void main(String[] args) throws IOException {
    YDSearch YDSearch = new YDSearch();
    YDSearch.listFiles("C:/Users/Jonathan/Desktop/YD Tests/1) High Quality/");
    YDSearch.listFiles("C:/Users/Jonathan/Desktop/YD Tests/2) Medium Quality/");
    YDSearch.listFiles("C:/Users/Jonathan/Desktop/YD Tests/3) Low Quality/");
    YDSearch.checkHeaderSC("C:/Users/Jonathan/Desktop/YouDetect/SearchByFileType/ReadyForAnalysis.dat");
  }
}