我正在逐行读取文件,如下所示:
FileReader myFile = new FileReader(File file);
BufferedReader InputFile = new BufferedReader(myFile);
// Read the first line
String currentRecord = InputFile.readLine();
while(currentRecord != null) {
currentRecord = InputFile.readLine();
}
Run Code Online (Sandbox Code Playgroud)
但是,如果上传其他类型的文件,它仍将读取其内容.例如,如果上传的文件是图像,则在读取文件时将输出垃圾字符.所以我的问题是:如何在阅读之前检查文件是否为CSV?
检查文件的扩展名有点蹩脚,因为有人可以上传非CSV但扩展名为.csv的文件.提前致谢.
确定文件的 MIME 类型并不是一件容易的事,特别是当 ASCII 部分可以与二进制部分混合时。
实际上,当您查看 java 邮件系统如何确定电子邮件的 MIME 类型时,它确实涉及读取其中的所有字节,并应用一些“规则”。
查看MimeUtility.java
- 如果此数据源的主要类型是“文本”并且其输入流中的所有字节都是 US-ASCII,则编码为“7 位”。
- 如果超过一半的字节是非 US-ASCII,则编码为“base64”。
- 如果少于一半的字节是非 US-ASCII,则编码是“quoted-printable”。
- 如果该数据源的主要类型不是“text”,那么如果其输入流的所有字节都是US-ASCII,则编码为“7bit”。
- 即使有一个非 US-ASCII 字符,编码也是“base64”。
@return
“7bit”、“引用打印”或“base64”
正如mmyers在删除的评论中提到的, JavaMimeType应该做同样的事情,但是:
:
File file = new File("/home/bibi/monfichieratester");
InputStream inputStream = new FileInputStream(file);
ByteArrayOutputStream byteArrayStream = new ByteArrayOutputStream();
int readByte;
while ((readByte = inputStream.read()) != -1) {
byteArrayStream.write(readByte);
}
String mimetype = "";
byte[] bytes = byteArrayStream.toByteArray();
MagicMatch m = Magic.getMagicMatch(bytes);
mimetype = m.getMimeType();
Run Code Online (Sandbox Code Playgroud)
所以...既然您正在阅读文件的所有内容,您可以利用它来根据该内容和您自己的规则来确定类型。
归档时间: |
|
查看次数: |
12918 次 |
最近记录: |