Tag: 文件

检查文件是否完整写入

目前我正在开发一个项目,它在其中一个例程中处理源目录中的文件。 有一个Java进程正在查找指定的目录,并尝试读取和处理文件(如果存在)。 文件退出大并由其他第三方进程更新。 问题是如何检查文件是否完整写入? 我正在尝试使用file.length()但看起来即使写入过程尚未完成它也会返回实际大小。 我觉得解决方案应该依赖于平台。 任何帮助,将不胜感激。 更新:这个问题与副本没有什么不同,但它有一个高评级的工作代码片段的答案。

如何比较大文本文件?

关于你对我的“技巧”的看法,我有一个普遍的问题。 有2个文本文件( file_1和file_2 )需要相互比较。 两者都非常庞大(3-4千兆字节,每个30,000,000到45,000,000行)。 我的想法是将file_1几行(尽可能多的) file_1入内存,然后将它们与file_2 所有行进行file_2 。 如果匹配,则匹配的两个文件中的行应写入新文件。 然后继续使用接下来的1000行file_1 ,并将这些行与file_2 所有行进行比较,直到我完全浏览file_1 。 但这对我来说实际上非常非常耗时且复杂。 你能想到比较这两个文件的任何其他方法吗? 您认为比较可能需要多长时间? 对于我的计划,时间并不重要。 我没有处理过如此庞大的文件的经验,因此我不知道这需要多长时间。 它不应该超过一天。 ;-)但我担心我的技术可能会永远… 刚出现在我脑海中的Antoher问题:你会在内存中读到多少行? 越多越好? 有没有办法在实际尝试之前确定可能的行数? 我想尽可能多地阅读(因为我认为这更快)但我经常用完内存。 提前致谢。 编辑我想我必须多解释一下我的问题。 目的不是看两个文件是否相同(它们不是)。 每个文件中都有一些共享相同“特征”的行。 这是一个例子: file_1看起来有点像这样: mat1 1000 2000 TEXT //this means the range is from 1000 – 2000 mat1 2040 2050 TEXT mat3 10000 10010 TEXT mat2 20 500 […]

Java中包和目录的区别

在Java项目中 ,将所有.java文件保存在同一个文件夹中是否意味着它们位于同一个包中? 与将所有项目文件保存在一个文件夹中相比,为我们的项目制作包有什么区别? 这个post并没有真正解决我的问题。

使用Java为大文件生成MD5非常慢

我正在使用Java为某些文件生成MD5哈希。 我需要为几个文件生成一个MD5,总大小约为1千兆字节。 这是我的代码: private String generateMD5(SequenceInputStream inputStream){ if(inputStream==null){ return null; } MessageDigest md; try { int read =0; byte[] buf = new byte[2048]; md = MessageDigest.getInstance(“MD5”); while((read = inputStream.read(buf))>0){ md.update(buf,0,read); } byte[] hashValue = md.digest(); return new String(hashValue); } catch (NoSuchAlgorithmException e) { return null; } catch (IOException e) { return null; }finally{ try { […]

如何在Java中获取mp3文件的总时间?

我如何在Java中获得声音文件的总时间? 适用于wav文件,但不适用于mp3文件。 他们是(给定文件): AudioInputStream audioInputStream = AudioSystem.getAudioInputStream(file); AudioFormat format = audioInputStream.getFormat(); long frames = audioInputStream.getFrameLength(); double durationInSeconds = (frames+0.0) / format.getFrameRate(); 和: AudioInputStream audioInputStream = AudioSystem.getAudioInputStream(file); AudioFormat format = audioInputStream.getFormat(); long audioFileLength = file.length(); int frameSize = format.getFrameSize(); float frameRate = format.getFrameRate(); float durationInSeconds = (audioFileLength / (frameSize * frameRate)); 它们为wav文件提供了相同的正确结果,但对于mp3文件却有错误和不同的结果。 知道如何获取mp3文件的持续时间?

Java用于读取200万行文本文件的最快方式

目前我正在使用扫描仪/文件读取器并使用whilenextline。 我认为这种方法效率不高。 有没有其他方法来读取具有类似function的文件? public void Read(String file) { Scanner sc = null; try { sc = new Scanner(new FileReader(file)); while (sc.hasNextLine()) { String text = sc.nextLine(); String[] file_Array = text.split(” “, 3); if (file_Array[0].equalsIgnoreCase(“case”)) { //do something } else if (file_Array[0].equalsIgnoreCase(“object”)) { //do something } else if (file_Array[0].equalsIgnoreCase(“classes”)) { //do something } else if (file_Array[0].equalsIgnoreCase(“function”)) […]

如何在不创建临时文件的情况下获取文件扩展名或文件类型的图标?

我在JTable列出了一些带有图标的文件名(如Windows资源管理器中的那些)。 如果我有一个来自本地文件系统的File对象,我知道获取图标的两种方法: javax.swing.filechooser.FileSystemView.getFileSystemView().getSystemIcon( file ) 对于16×16图标或更大的图标: sun.awt.shell.ShellFolder.getShellFolder( file ).getIcon( true ) ) 由于我的文件存储在数据库中,因此我没有File对象。 我的解决方法是创建具有特定文件扩展名的临时文件,使用上述两种方法之一并缓存该图标以在CellRenderer中显示它。 我搜索了没有临时文件的解决方案,发现了两个我不喜欢的解决方案: org.eclipse.swt.program.Program.findProgram(String extension).getImageData() ,但我不想使用SWT 来自JDIC项目的孵化器的org.jdesktop.jdic.icons.IconService 。 IconService的最后一次更改是6年前,在2年前的JDIC上,我找不到可下载的jar。 还有其他解决方案吗?

如何在不保持文件打开的情况下跟踪Java中的“Tail -f”这样的文件(防止重命名/删除)

我想在Java应用程序中“尾随-f”很多日志文件。 我通过监视大小和上次更新并重复打开文件并在文件大小或上次更新时间发生变化时读取最后几个字节 – 然后立即关闭它来实现此function。 这似乎有问题,因为当记录器决定重命名文件时,我可能会打开它,这将导致某种问题。 我还想检测一个“Rolled”文件,其机制更加确定,而不是注意到文件大小减少……似乎容易出错,但不太可能。 由于我似乎无法访问文件描述符或其他低级文件实用程序,因此我可能无法重现尾部的行为 – 但是如果没有“锁定”它以进行重命名/删除,是否有任何读取文件的技巧( Windows 7的) 我想另一种可能性是实际产生一个尾部-f进程并读取进程输出,但这似乎有点沉重 – 我在这里扫描了60个日志文件,其中一些有很多输出(大多数将是空闲的)。

Java编译器错误:尝试访问本地变量时“找不到符号”

$ javac GetAllDirs.java GetAllDirs.java:16: cannot find symbol symbol : variable checkFile location: class GetAllDirs System.out.println(checkFile.getName()); ^ 1 error $ cat GetAllDirs.java import java.util.*; import java.io.*; public class GetAllDirs { public void getAllDirs(File file) { if(file.isDirectory()){ System.out.println(file.getName()); File checkFile = new File(file.getCanonicalPath()); }else if(file.isFile()){ System.out.println(file.getName()); File checkFile = new File(file.getParent()); }else{ // checkFile should get Initialized […]

在从文件中读取和删除某些行时遇到问题?

该计划的目的是从文本文件中删除某些运动队及其成员,然后用新的值集覆盖原始文件。 这是通过将值读入数组,然后循环遍历数组并删除团队名称和接下来的2行来尝试的,但由于某种原因,它会在索引之后停止通过数组。 我被卡住了,所以任何帮助都会很棒 码: private void RemoveSportsTeamButtonActionPerformed(java.awt.event.ActionEvent evt) { String ChosenTeam = “”; ChosenTeam = JOptionPane.showInputDialog(“What Team Do you want to remove?”); ArrayList Teamlist = new ArrayList(); if (ChosenTeam.length() > 0) { } else { Scanner Reader = null; try { Reader = new Scanner(new File(“ListofSportTeams.txt”)); } catch (FileNotFoundException ex) { } while (Reader.hasNext()) { […]