Java生成文件报错之FileNotFoundException


      有这样一种需求,导出一个Excel文件,要求文件名中包含当前时间(精确到秒),只需要将当前时间格式化为字符串,然后用字符串与Excel后缀拼接起来作为待导出的Excel的全文件名,用这个全文件名构造一个输出流即可,于是有如下代码:
import java.io.File;
import java.io.FileOutputStream;
import java.text.SimpleDateFormat;
import java.util.Date;

public class NoColonTest {
    public static void main(String[] args) throws Exception {
        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        String fileName = simpleDateFormat.format(new Date());
        String wholeFileName = fileName + ".xls";
        FileOutputStream fileOutputStream = null;
        try {
            fileOutputStream = new FileOutputStream(wholeFileName);
            File file = new File(wholeFileName);
            if (file.exists()) {
                file.delete();
            }
            fileOutputStream.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

      怎么报错了呢,对于输出流来讲如果文件名不存在就会新创建文件,如果存在就覆盖原有文件,难道不是这样吗?在看看报错原因:文件名、目录名或卷标语法不正确,难到是文件名带了特殊字符?在桌面上新建一个文件,在文件名中输入冒号,windows果然报错了,说文件名不能包含\ / : * ? "<>|,好吧,那我创建日期格式化器时索性把时分秒之间的冒号和年月日的连字符全部去掉,于是将上述代码改为如下:

import java.io.File;
import java.io.FileOutputStream;
import java.text.SimpleDateFormat;
import java.util.Date;

public class NoColonTest {
    public static void main(String[] args) throws Exception {
        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyyMMddHHmmss");
        String fileName = simpleDateFormat.format(new Date());
        String wholeFileName = fileName + ".xls";
        FileOutputStream fileOutputStream = null;
        try {
            fileOutputStream = new FileOutputStream(wholeFileName);
            File file = new File(wholeFileName);
            if (file.exists()) {
                file.delete();
            }
            fileOutputStream.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

      OK,这次报错消失正常生成了Excel文件,文件名年月日时分秒全部连在一起,这时忽然想起QQ截图保存时默认的文件名中包含的就有年月日时分秒,中间也没有任何符号;Ctrl+Alt+a,随手调出QQ截图,保存,嗯,还真是这样!

     这种方式生成的Excel文件,用2013版本打开时会报如下一个错误,但仍然能打开,如果用Apache POI对改文件操作后再打开时就不报错了(原因暂时不详):

      写到这个,回头一看,是自己不熟悉文件命名规则才导致的错误尴尬,长点心吧!

      解释一下类名,NoColonTest,colon是冒号的意思,所以整体是指“不带冒号的测试”!微笑


注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
粤ICP备14056181号  © 2014-2021 ITdaan.com