【问题标题】:Failed to remove the header of multiple csv files删除多个 csv 文件的标头失败
【发布时间】:2018-01-07 19:00:26
【问题描述】:

我想删除多个 csv 文件的标题。因此,当我尝试这样做时,它会显示错误。但是我可以通过这种方式删除单个 csv 文件的标题。

为了实现我可以一次删除多个 csv 文件的标题的目标,我错过了什么?我需要这方面的帮助。

注意:我给出了正确的文件名、目录名或卷标语法。

    package hadoop;


import java.io.IOException;
import java.io.RandomAccessFile;

class RemoveLine
{

public static void main(String...args) throws IOException 
    {  
    RandomAccessFile raf = new RandomAccessFile("F://sample1/*.csv", "rw");          
     //Initial write position                                             
    long writePosition = raf.getFilePointer();                            
    raf.readLine();                                                       
    // Shift the next lines upwards.                                      
    long readPosition = raf.getFilePointer();                             

    byte[] buff = new byte[1024];                                         
    int n;                                                                
    while (-1 != (n = raf.read(buff))) {                                  
        raf.seek(writePosition);                                          
        raf.write(buff, 0, n);                                            
        readPosition += n;                                                
        writePosition += n;                                               
        raf.seek(readPosition);                                           
    }                                                                     
    raf.setLength(writePosition);                                         
    raf.close();                                                          
    }   
}

输出:

Exception in thread "main" java.io.FileNotFoundException: F:\sample1\*.csv (The filename, directory name, or volume label syntax is incorrect)
    at java.io.RandomAccessFile.open0(Native Method)
    at java.io.RandomAccessFile.open(Unknown Source)
    at java.io.RandomAccessFile.<init>(Unknown Source)
    at java.io.RandomAccessFile.<init>(Unknown Source)
    at hadoop.RemoveLine.main(RemoveLine.java:12)

【问题讨论】:

    标签: java csv


    【解决方案1】:

    您可能正在考虑在命令行中使用的 glob 语法。 Windows cmd 和 Linux bash 采用 *.csv 之类的内容,并将其扩展为所有匹配文件名的列表。

    另一方面,Java 的 RandomAccessFile 需要一个特定的文件名,并且理解 glob 语法。您必须自己实现该行为。首先,您需要获取要更改的所有文件的列表。然后您必须遍历该列表并执行您想要的操作。

    【讨论】:

    • 也许使用 PathMatcher 可以解决 glob* 之类的语法 docs.oracle.com/javase/tutorial/essential/io/find.html
    • 我明白你的意思。我一直坚持这一点,我必须通过这种方式实施,但根据您的意见,这是不可能的。
    • 让我试试! @YyYo
    • @YyYo 我对“获取所有文件列表”的细节故意含糊其辞。有很多很多很多不同的方法可以做到这一点。例如,另一种解决方案是接受命令行参数。这使得 shell 完成了将 *.csv 扩展为文件名列表的所有脏活。然后你可以直接遍历名字。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-21
    相关资源
    最近更新 更多