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