如果文件名已存在,如何创建新的PDF文件?

时间:2015-03-27 14:03:23

标签: java filenames

我的代码输出一个简单的收据,其中包含用户的一些详细信息,如姓名,票价和停止号码。这将生成包含这些详细信息的PDF文件。每当新用户在主窗体中输入数据时,这只会覆盖PDF文件中第一个用户的数据。如何在不附加或覆盖第一个用户的原始数据的情况下创建新的PDF文件? (如sample.pdf,sample2.pdf,sample3.pdf ......等)

public class PDFDisplay {

public static void generatePDF(PassengerBean passengerBean) {
     Document document = new Document();

     try {
         final Chunk NEWLINE = new Chunk("\n");
          PdfWriter.getInstance(document,
              new FileOutputStream("C://sample.pdf"));

          document.open();

          Image img = Image.getInstance("C:\\Documents and Settings\\Pinky\\My Documents\\Angel's files\\ICS 113\\eclipse_ws\\MRTApplicationIteration2\\WebContent\\image\\mrt.jpg");
          document.add(img);

          String or = "Official Receipt";
          String hr = "-----------------------------------------------------------";
          String spacer = " ";
          String name = "Passenger Name: " + passengerBean.lname + "," +  " " + passengerBean.fname;
          String dest = "Destination: " + passengerBean.dest + " STATION";
          String stopno = passengerBean.stop;
          double fare = passengerBean.fare;
          String fare1 = "Fare: PHP" + " " + String.valueOf(fare);
          String ccnum = "CREDIT CARD NUMBER: " + " " + "************" + passengerBean.ccnum.substring(Math.max(0, passengerBean.ccnum.length() - 4));


            Paragraph para10 = new Paragraph(32);
            para10.setSpacingBefore(10);
            para10.setSpacingAfter(10);
            para10.add(new Chunk(or));
            document.add(para10);

            Paragraph para9 = new Paragraph(32);
            para9.setSpacingBefore(30);
            para9.setSpacingAfter(10);
            para9.add(new Chunk(hr));
            document.add(para9);

            // Setting paragraph line spacing to 32
            Paragraph para1 = new Paragraph(32);
            para1.setSpacingBefore(5);
            para1.setSpacingAfter(10);
            para1.add(new Chunk(name));
            document.add(para1);

            Paragraph para2 = new Paragraph();
            para2.setSpacingAfter(10);
            para2.add(new Chunk(dest));
            document.add(para2);

            Paragraph para3 = new Paragraph();
            para3.setSpacingAfter(10);
            para3.add(new Chunk(stopno));
            document.add(para3);

            Paragraph para4 = new Paragraph();
            para4.setSpacingAfter(10);
            para4.add(new Chunk(fare1));
            document.add(para4);

            Paragraph para5 = new Paragraph();
            para5.setSpacingAfter(10);
            para5.add(new Chunk(ccnum));
            document.add(para5);


          document.close();

        } catch (DocumentException e) {
          e.printStackTrace();
        } catch (FileNotFoundException e) {
          e.printStackTrace();
        }  catch (IOException e) {
            e.printStackTrace();
        }
}

}

1 个答案:

答案 0 :(得分:1)

您可能需要实现所需的几乎所有方法都可以在File class

的Java API文档中找到

您想要创建一个以sample开头并以pdf结尾的唯一文件。为此,您可以使用createTempFile() method。 6年前StackOverflow已经回答了这个问题:What is the best way to generate a unique and short file name in Java

假设您确实希望在文件名中包含增量数字,例如sample0001.pdf,sample0002.pdf,sample0003.pdf等等,那么你可以使用list() method。这将返回一个String值数组,其中包含目录中所有文件的名称。我建议您使用FilenameFilter,这样您才能获得以sample开头的PDF文件。然后,您可以对这些名称进行排序,以找到编号最大的名称。请参阅How to list latest files in a directory using FileNameFilter以了解如何创建此类过滤器。 一旦你有一个具有最高编号的文件名,只需要String操作来创建一个新的文件名。在定义File时使用该文件名(或OutputStream实例)。

正如您所看到的,这个答案并未在任何地方提及iText,虽然我们创建或列出的文件的扩展名为.pdf,但它与PDF或PDF生成无关。这是一个纯粹的Java问题。