[英]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.