0

纠正我哪里出错了。

我已经用 Java 编写了一个程序,它将从两个不同的目录中获取文件列表,并使用文件名创建两个(Java 列表)。我想将列表(下载的文件列表和上传的文件列表)都传输到 Excel。

我得到的结果是这些列表是按行传输的。我希望它们按列显示。

下面给出的是代码:

    public class F {

static List<String> downloadList = new ArrayList<>();
static List<String> dispatchList = new ArrayList<>();

public static class FileVisitor extends SimpleFileVisitor<Path> {

    @Override
    public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOException {
        String name = file.toRealPath().getFileName().toString();
        if (name.endsWith(".pdf") || name.endsWith(".zip")) {
            downloadList.add(name);
        }
        if (name.endsWith(".xml")) {
            dispatchList.add(name);
        }
        return FileVisitResult.CONTINUE;
    }
}

public static void main(String[] args) throws IOException {
    try {
        Path downloadPath = Paths.get("E:\\report\\02_Download\\10252013");
        Path dispatchPath = Paths.get("E:\\report\\01_Dispatch\\10252013");

        FileVisitor visitor = new FileVisitor();
        Files.walkFileTree(downloadPath, visitor);
        Files.walkFileTree(downloadPath, EnumSet.of(FileVisitOption.FOLLOW_LINKS), 1, visitor);

        Files.walkFileTree(dispatchPath, visitor);
        Files.walkFileTree(dispatchPath, EnumSet.of(FileVisitOption.FOLLOW_LINKS), 1, visitor);
        System.out.println("Download File List" + downloadList);
        System.out.println("Dispatch File List" + dispatchList);
        F f = new F();
        f.UpDown(downloadList, dispatchList);
    } catch (Exception ex) {
        Logger.getLogger(F.class.getName()).log(Level.SEVERE, null, ex);
    }

}
int rownum = 0;
int colnum = 0;
HSSFSheet firstSheet;
Collection<File> files;
HSSFWorkbook workbook;
File exactFile;

{
    workbook = new HSSFWorkbook();
    firstSheet = workbook.createSheet("10252013");
    Row headerRow = firstSheet.createRow(rownum);
    headerRow.setHeightInPoints(40);
}

public void UpDown(List<String> download, List<String> upload) throws Exception {

    List<String> headerRow = new ArrayList<>();
    headerRow.add("Downloaded");
    headerRow.add("Uploaded");
    List<List> recordToAdd = new ArrayList<>();

    recordToAdd.add(headerRow);
    recordToAdd.add(download);
    recordToAdd.add(upload);
    F f = new F();
    f.CreateExcelFile(recordToAdd);
    f.createExcelFile();
}

void createExcelFile() {
    FileOutputStream fos = null;
    try {
        fos = new FileOutputStream(new File("E:\\report\\Download&Upload.xls"));
        HSSFCellStyle hsfstyle = workbook.createCellStyle();
        hsfstyle.setBorderBottom((short) 1);
        hsfstyle.setFillBackgroundColor((short) 245);
        workbook.write(fos);
    } catch (Exception e) {
    }
}

public void CreateExcelFile(List<List> l1) throws Exception {
    try {
        for (int j = 0; j < l1.size(); j++) {
            Row row = firstSheet.createRow(rownum);
            List<String> l2 = l1.get(j);
            for (int k = 0; k < l2.size(); k++) {
                Cell cell = row.createCell(k);
                cell.setCellValue(l2.get(k));
            }
            rownum++;
        }
    } catch (Exception e) {
    } finally {
    }
}
    }

(目的是验证给定日期下载和上传的文件)谢谢。

4

2 回答 2

0

感谢您的建议。我已经修改了我的程序并上传了解决方案。

public class F {
static List<String> downloadList = new ArrayList<>();
static List<String> dispatchList = new ArrayList<>();

public static class FileVisitor extends SimpleFileVisitor<Path> {

    @Override
    public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOException {
        String name = file.toRealPath().getFileName().toString();
        if (name.endsWith(".pdf") || name.endsWith(".zip")) {
                downloadList.add(name);
        }
        if (name.endsWith(".xml")) {
            dispatchList.add(name);
        }
        return FileVisitResult.CONTINUE;
    }
}

public static void main(String[] args) throws IOException {
    try {
        Path downloadPath = Paths.get("E:\\Download\\10292013");
        Path dispatchPath = Paths.get("E:\\Dispatch\\10292013");

        FileVisitor visitor = new FileVisitor();
        Files.walkFileTree(downloadPath, visitor);
        Files.walkFileTree(downloadPath, EnumSet.of(FileVisitOption.FOLLOW_LINKS), 1, visitor);

        Files.walkFileTree(dispatchPath, visitor);
        Files.walkFileTree(dispatchPath, EnumSet.of(FileVisitOption.FOLLOW_LINKS), 1, visitor);

        /* List all files*/
        System.out.println("Download File List" + downloadList);
        System.out.println("Dispatch File List" + dispatchList);
        F f = new F();
        f.UpDown(downloadList, dispatchList);
    } catch (Exception ex) {
        Logger.getLogger(F.class.getName()).log(Level.SEVERE, null, ex);
    }

}
int rownum = 0;
int colnum = 0;
HSSFSheet firstSheet;
Collection<File> files;
HSSFWorkbook workbook;
File exactFile;

{
    workbook = new HSSFWorkbook();
    firstSheet = workbook.createSheet("10292013");
    Row headerRow = firstSheet.createRow(rownum);
    headerRow.setHeightInPoints(40);
}

public void UpDown(List<String> download, List<String> upload) throws Exception {

    List<String> headerRow = new ArrayList<String>();
    headerRow.add("Downloaded");
    headerRow.add("Uploaded");
    List<List<String>> recordToAdd = new ArrayList<List<String>>();
    recordToAdd.add(headerRow);
    recordToAdd.add(download);
    recordToAdd.add(upload);
    CreateExcelFile(headerRow, download, upload);
    createExcelFile();
}

void createExcelFile() {
    FileOutputStream fos = null;
    try {
        fos = new FileOutputStream(new File("E:\\report\\Download&Upload.xls"));
        HSSFCellStyle hsfstyle = workbook.createCellStyle();
        hsfstyle.setBorderBottom((short) 1);
        hsfstyle.setFillBackgroundColor((short) 245);
        workbook.write(fos);
    } catch (Exception e) {
    }
}

public void CreateExcelFile(List<String> headers, List<String> down, List<String> up) throws Exception {

    try {
        Row row = firstSheet.createRow((short)(rownum++));
        for(int i = 0;i < headers.size();i++) {
            Cell cell = row.createCell(i);
            cell.setCellValue(headers.get(i));
        }
        for (int j = 0; j < down.size(); j++) {
             row = firstSheet.createRow((short)(rownum++));
             Cell cell = row.createCell(0);
             cell.setCellValue(down.get(j));
             if(up.size() > j) {
                 cell = row.createCell(1);
                 cell.setCellValue(up.get(j)); 
             }
        }

    } catch (Exception e) {
    } finally {
    }
}
} 
于 2013-10-30T14:00:08.350 回答
0

如果您想在而不是中访问/构建工作表,则需要更改工作表访问代码。

从您现有的代码中剪下,以下是关键功能:

Row row = firstSheet.createRow( rowNum);
Cell cell = row.createCell( colNum);
cell.setCellValue( value);

您需要重新排列这些循环以按方式输出数据。

于 2013-10-28T21:52:20.190 回答