Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/315.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 试图将二进制文件读取为文本,但扫描仪在第一行停止_Java_Binaryfiles_Java.util.scanner - Fatal编程技术网

Java 试图将二进制文件读取为文本,但扫描仪在第一行停止

Java 试图将二进制文件读取为文本,但扫描仪在第一行停止,java,binaryfiles,java.util.scanner,Java,Binaryfiles,Java.util.scanner,我正试图读取二进制文件,但我的程序在第一行就停止了。。 我想这是因为文件中有奇怪的字符..我只想从中提取一些方向。有没有办法做到这一点 public static void main(String[] args) throws IOException { Scanner readF = new Scanner(new File("D:\\CurrentDatabase_372.txt")); String line = null; String newLine = Sy

我正试图读取二进制文件,但我的程序在第一行就停止了。。 我想这是因为文件中有奇怪的字符..我只想从中提取一些方向。有没有办法做到这一点

public static void main(String[] args) throws IOException
{

    Scanner readF = new Scanner(new File("D:\\CurrentDatabase_372.txt"));
    String line = null;
    String newLine = System.getProperty("line.separator");
    FileWriter writeF = new FileWriter("D:\\Songs.txt");

    while (readF.hasNext())
    {
        line = readF.nextLine();

        if (line.contains("D:\\") && line.contains(".mp3"))
        {
            writeF.write(line.substring(line.indexOf("D:\\"), line.indexOf(".mp3") + 4) + newLine);
        }
    }

    readF.close();
    writeF.close();
}

文件的开头如下所示:

pppppamepD:\Music\Korn\Untouchables\03     Blame.mp3pmp3pmp3pKornpMetalpKornpUntouchablespKornpUntouchables*;*KornpKornpKornUntouchables003pMetalKornUntouchables003pBlameKornUntouchables003pKornKornUntouchables003pMP3pppppCpppÀppp@ppøp·pppŸú#pdppppppòrSpUpppppp€ppªp8›qpppppppppppp,’ppÒppp’ÍpET?ppppppôpp¼}`Ñ#ãâK†¡H¤*(DppppppppppppppppuÞѤéú:M®$@]jkÝW0ÛœFµú½XVNp`w—wâÊp:ºŽwâÊpppp8Npdpp¡pp{)pppppppppppppppppyY:¸[ªA¥Bi   `Û¯pppppppppppp2pppppppppppppppppppppppppppppppppppp¿ÞpAppppppp€ppp€;€?€CpCpC€H€N€S€`€e€y€~p~p~€’€«€Ê€â€Hollow LifepD:\Musica\Korn\Untouchables\04 Hollow Life.mp3pmp3pmp3pKornpMetalpKornpUntouchablespKornpUntouchables*;*KornpKornpKornUntouchables004pMetalKornUntouchables004pHollow LifeKornUntouchables004pKornKornUntouchables004pMP3pppppCpppÀHppppppøp¸pppǺxp‰ppppppòrSpUpppppp€ppªp8›qpppppppppppp,’ppÒpppŠºppppppppppôpp¼}`Ñ#ãâK†¡H¤*(DpppppppppppppppppãG#™R‚CA—®þ^bN °mbŽ‚^¨pG¦sp;5p5ÓÐùšwâÊp
)ŽwâÊpppp8Npdpp!cpp{pppppppppppppppppyY:¸[ªA¥Bi `ۯǺxp‰pppppp2pppppppppppppppppppppppppppppppppppp¿
我想提取文件方向,如“D:\Music\Korn\Untouchables\03 dull.mp3”。

在while循环检查中使用而不是
hasNext()

while (readF.hasNextLine()) {
 String line = readF.nextLine();
 //Your code
 }
在while循环检查中使用而不是
hasNext()

while (readF.hasNextLine()) {
 String line = readF.nextLine();
 //Your code
 }

不能使用面向行的扫描仪读取二进制文件。您不能保证二进制文件甚至有由换行符分隔的“行”。例如,如果有两个文件与模式“D:\.*.mp3”匹配,并且没有插入换行符,您的扫描仪会怎么做?您将提取第一个“D:\”和最后一个“.mp3”之间的所有内容,所有垃圾都在这两者之间。从这样的非分隔流中提取文件名需要不同的策略

如果我写这篇文章,我会使用一个相对简单的有限状态识别器,一次处理一个字符。当它遇到一个“d”时,它开始保存字符,检查每个字符以确保它匹配所需的模式,当它在.mp3中看到“3”时结束。如果在任何时候它检测到一个不适合的字符,它会重置并继续查找


编辑:如果要处理的文件很小(小于50mb左右),您可以将整个文件加载到内存中,这将使扫描更简单。

您不能使用面向行的扫描仪读取二进制文件。您不能保证二进制文件甚至有由换行符分隔的“行”。例如,如果有两个文件与模式“D:\.*.mp3”匹配,并且没有插入换行符,您的扫描仪会怎么做?您将提取第一个“D:\”和最后一个“.mp3”之间的所有内容,所有垃圾都在这两者之间。从这样的非分隔流中提取文件名需要不同的策略

如果我写这篇文章,我会使用一个相对简单的有限状态识别器,一次处理一个字符。当它遇到一个“d”时,它开始保存字符,检查每个字符以确保它匹配所需的模式,当它在.mp3中看到“3”时结束。如果在任何时候它检测到一个不适合的字符,它会重置并继续查找


编辑:如果要处理的文件很小(小于50mb左右),您可以将整个文件加载到内存中,这将使扫描更简单。

如前所述,由于它是二进制文件,您不能使用扫描仪或其他基于字符的读卡器。您可以使用常规的
FileInputStream
读取文件的实际原始字节。Java的
String
类有一个构造函数,它将获取一个字节数组并将它们转换为字符串。然后可以在该字符串中搜索文件名。如果您只使用默认字符集,这可能会起作用

字符串(字节[]): 用于读取字节的FileInputStream:

如前所述,因为它是一个二进制文件,所以不能使用扫描仪或其他基于字符的阅读器。您可以使用常规的
FileInputStream
读取文件的实际原始字节。Java的
String
类有一个构造函数,它将获取一个字节数组并将它们转换为字符串。然后可以在该字符串中搜索文件名。如果您只使用默认字符集,这可能会起作用

字符串(字节[]): 用于读取字节的FileInputStream:

Thx,快速回答!我已经修好了,但还是停在第一线。谢谢你的快速回答!我已经修复了它,但它仍然在第一行停止..当我在notepad++中打开文件时,它会显示行号,但我不确定它是否在用行分隔符分割文件。。我会试试你的方法,并告诉你它是否有效。谢谢你的回答。这绝对有效!!。。非常感谢你的建议!!。。我终于从二进制文件中提取了所有歌曲。当我在notepad++中打开该文件时,它会显示行号,但我不确定它是否在用行分隔符分割文件。。我会试试你的方法,并告诉你它是否有效。谢谢你的回答。这绝对有效!!。。非常感谢你的建议!!。。我终于从二进制文件中提取了所有歌曲。Thx用于“ReadingBytes”链接!!。。我不知道你可以一个字节一个字节地读取文件。Thx用于“ReadingBytes”链接!!。。我不知道你能一个字节一个字节地读文件。