簡體   English   中英

多個'if'語句到一個outputStream中

[英]Multiple 'if' statements into one outputStream

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");
  }
}

嘿,上面的編碼有一些問題,希望這里的人可以為您提供幫助。 這是部分代碼版本,因為真正的代碼還有4個if / else if語句。

程序編譯並開始正常運行。 它從input2中正在讀入/再讀出的文件中產生幾個結果,但隨后停止,不再產生結果並給出錯誤:

線程“主”中的異常java.io.DataInputStream.readUnsignedShort(DataInputStream.java:323)處的java.io.DataInputStream.readUTF(DataInputStream.java:572)處的java.io.DataInputStream.readUTF(位於YDSearch.main(YDSearch.java:93)的YDSearch.listFiles(YDSearch.java:85)的DataInputStream.java:547)

有人知道為什么會發生這種情況,並有可以分享的解決方案嗎? 我也嘗試過將變量'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”結尾的文件,則將不成立。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM