阅读excel 2007并在java中编写文件

时间:2013-05-07 05:13:29

标签: java apache-poi

我想从ftp服务器检索文件,我也使用了Apache poi client.retrieveFile()方法,但是我无法打开它显示的内容:

  

excel无法打开文件检查文件扩展名和文件格式。检查文件未损坏

然后我使用了文件阅读器和编写器。以下是我的代码段。

public void testFileWriter()
    {
        try{

        FTPFile[] files = client.listFiles("/Ftp1");
        for (FTPFile file : files) {
            File serverFile = new File("D:/Pondi.xlsx");
            if(!serverFile.isFile())
            {
                serverFile.createNewFile();
            }
            BufferedWriter writer = new BufferedWriter(new FileWriter(serverFile));
            client.enterLocalPassiveMode();
            InputStream inputStream = client.retrieveFileStream("/Ftp1/"+ file.getName());
            BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream));
            System.out.println("Created Reader");
            while(reader.read()!=-1)
            {
                String temp = reader.readLine();
                System.out.println(temp);


                writer.write(temp);
            }
            writer.flush();
            writer.close();
            reader.close();
        }

        }
        catch(IOException ioe){
            ioe.printStackTrace();
        }
    }

请帮我解决这个关键问题。

2 个答案:

答案 0 :(得分:2)

您必须使用API​​来处理它。您无法读取这些文件,例如阅读普通文本文件。

JExcel将有利于您的需求。

可以使用示例here

复制文件时请使用this。通过您使用的方法读取文件以进行复制将无法正常工作。

希望对你有所帮助。

答案 1 :(得分:1)

如果要读取和复制二进制数据,则不能使用reader.readLine(),因为二进制文件中没有行。因此,这种尝试很可能会失败。

将其复制为:

int fileNo = 0;
for (FTPFile file : files) {
    File serverFile = new File("D:/Pondi_" + fileNo + ".xlsx");
    ...
    InputStream in = client.retrieveFileStream("/Ftp1/"+ file.getName());
    OutputStream out = new FileOutputStream(serverFile);

    // read and copy binary data
    byte[] buf = new byte[1024];
    int len;
    while ((len = in.read(buf)) > 0){
        out.write(buf, 0, len);
    }

    in.close();
    out.close();
    fileNo++;
}

除此之外,请考虑为您的文件指定D:/Pondi.xlsx的其他名称,否则文件会在循环中一次又一次地被覆盖。我用fileNo做了这个。