Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/arduino/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java读取文件目录并创建指向pdf的链接_Java - Fatal编程技术网

Java读取文件目录并创建指向pdf的链接

Java读取文件目录并创建指向pdf的链接,java,Java,我试图完成的是读取文件目录并打印到pdf的链接,但更重要的是,一些pdf以123456_2018-01.pdf、456234_2018-01a.pdf或123456_2018-01结尾,后面有一些字母。我想不出我应该使用什么表达式来捕获当月的所有PDF for (File obj : contentsOfDirectory) { if (obj.isFile()) { if (!obj.getName().subst

我试图完成的是读取文件目录并打印到pdf的链接,但更重要的是,一些pdf以123456_2018-01.pdf、456234_2018-01a.pdf或123456_2018-01结尾,后面有一些字母。我想不出我应该使用什么表达式来捕获当月的所有PDF

    for (File obj : contentsOfDirectory) {
                if (obj.isFile()) {
                    if (!obj.getName().substring(0, 2).equals("._")) {

                        String file = "this is the file directory";
                        String pdfBills = file + obj.getName().toString();

                        String year = pdfBills.substring(pdfBills.lastIndexOf("_") + 1);

                        if (obj.getName().toString().endsWith("01.pdf")) {
            %>
                        <li><a href=<%=pdfBills%>>January <%=year%></a><br> <%
                        } else if (obj.getName().toString().endsWith("02.pdf")) {
            %>
                        <li><a href=<%=pdfBills%>>February <%=year%></a><br> <%
for(文件obj:contentsOfDirectory){
if(obj.isFile()){
如果(!obj.getName().substring(0,2).equals(“.”)){
String file=“这是文件目录”;
字符串pdfBills=file+obj.getName().toString();
字符串年份=pdfBills.substring(pdfBills.lastIndexOf(“”)+1);
if(obj.getName().toString().endsWith(“01.pdf”)){
%>



  • 如果您没有查看文件名的结尾,而是检查了文件名的开头呢?看起来文件名的第一部分始终是YYYY-MM,您可以使用
    .substring()
    解析出年份和月份,如下所示:

    String year = pdfBills.substring(0, 4);
    String month = pdfBills.substring(5, 7);
    
    然后,您可以将月份数字字符串转换为可读的月份字符串,如下所示:

    import java.text.DateFormatSymbols;
    DateFormatSymbols symbols = new DateFormatSymbols();
    int intMonth = Integer.parseInt(month);
    String monthName = symbols.getMonths()[intMonth-1];
    
    这对我来说似乎是一种问题,所以请使用类。通过积极匹配我们想要的内容,它会隐式忽略不一致的文件(如您的
    示例)


    这可能有效,但我没有提到整个文件名类似于112323-001_2018-01,这是我没有说明的错误。在“_2018-01.pdf”之前的任何内容都是完全不相关的。我只关注“*”之后的信息。仅供参考
    obj.getName()。子字符串(0,2)
    如果目录包含一个文件名,就会抛出一个字符。你能解释一下Pattern.compile部分吗?它正在做我想做的事情,我想把这段代码添加到我的其他项目中,我想知道它是如何确定的。在答案中添加了一些链接。
    Pattern.compile
    创建了一个常规的表达式,可以多次使用它来匹配
  • 输入字符串,如
    pdfBills
    。我使用的正则表达式有两个“(捕获)(组)”,因此,当它匹配时,
    m.group(1)
    包含年份等
    final Pattern p = Pattern.compile(".*_(\\d{4})-(\\d{2})\\.pdf$");
    
    for (File obj : contentsOfDirectory) {
      if (obj.isFile()) 
        String file = "this is the file directory";
        String pdfBills = file + obj.getName().toString();
    
        Matcher m = p.matcher(pdfBills);
        if (m.matches()) {
          int year = Integer.parseInt(m.group(1));
          int month = Integer.parseInt(m.group(2));
          // ... do stuff with year and month
        }