- 浏览: 467459 次
- 性别:
- 来自: 杭州
文章分类
最新评论
-
ty1972873004:
sunwang810812 写道我运行了这个例子,怎么结果是这 ...
Java并发编程: 使用Semaphore限制资源并发访问的线程数 -
lgh1992314:
simpleDean 写道请问,Logger.setLevel ...
Java内置Logger详解 -
sunwang810812:
我运行了这个例子,怎么结果是这样的:2号车泊车6号车泊车5号车 ...
Java并发编程: 使用Semaphore限制资源并发访问的线程数 -
jp260715007:
nanjiwubing123 写道参考你的用法,用如下方式实现 ...
面试题--三个线程循环打印ABC10次的几种解决方法 -
cb_0312:
SurnameDictionary文章我没看完,现在懂了
中文排序
本文结合File,FileInputStream,FileRedaer以及BufferedReader的方法,将给出四个判断文件是否为空的方法:
本文包括如下三个部分:
1. 贴出File,FileInputStream,FileRedaer以及BufferedReader相应方法的源代码,了解一下。
2. 给出自己的实现。
3. 测试并给出分析结论。
File,FileInputStream,FileRedaer以及BufferedReader相应方法的源代码
/** * Returns the length of the file denoted by this abstract pathname. * The return value is unspecified if this pathname denotes a directory. * * @return The length, in bytes, of the file denoted by this abstract * pathname, or <code>0L</code> if the file does not exist * * @throws SecurityException * If a security manager exists and its <code>{@link * java.lang.SecurityManager#checkRead(java.lang.String)}</code> * method denies read access to the file */ public long length() { SecurityManager security = System.getSecurityManager(); if (security != null) { security.checkRead(path); } return fs.getLength(this); }
public class FileInputStream extends InputStream { /** * Returns the number of bytes that can be read from this file input * stream without blocking. * * @return the number of bytes that can be read from this file input * stream without blocking. * @exception IOException if an I/O error occurs. */ public native int available() throws IOException; }
public class InputStreamReader extends Reader { /** * Tell whether this stream is ready to be read. An InputStreamReader is * ready if its input buffer is not empty, or if bytes are available to be * read from the underlying byte stream. * * @exception IOException If an I/O error occurs */ public boolean ready() throws IOException { return sd.ready(); } }
public class FileReader extends InputStreamReader { }
public class BufferedReader extends Reader { /** * Tell whether this stream is ready to be read. A buffered character * stream is ready if the buffer is not empty, or if the underlying * character stream is ready. * * @exception IOException If an I/O error occurs */ public boolean ready() throws IOException { synchronized (lock) { ensureOpen(); /* * If newline needs to be skipped and the next char to be read * is a newline character, then just skip it right away. */ if (skipLF) { /* Note that in.ready() will return true if and only if the next * read on the stream will not block. */ if (nextChar >= nChars && in.ready()) { fill(); } if (nextChar < nChars) { if (cb[nextChar] == '\n') nextChar++; skipLF = false; } } return (nextChar < nChars) || in.ready(); } } }
给出自己的实现类
package my.tool.file.util; import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileReader; import java.io.IOException; public class EmptyFileChecker { public static boolean isFileEmpty1(File file) { FileInputStream fis = null; boolean flag = true; try { fis = new FileInputStream(file); if (fis.available() != 0) { flag = false; } } catch (FileNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } finally { if (null != fis) { try { fis.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } finally { fis = null; } } } return flag; } public static boolean isFileEmpty2(File file) { boolean flag = true; FileReader fr = null; try { fr = new FileReader(file); if (fr.ready()) { flag = false; } } catch (FileNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } finally { if (null != fr) { try { fr.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } finally { fr = null; } } } return flag; } public static boolean isFileEmpty3(File file) { boolean flag = true; BufferedReader br = null; try { br = new BufferedReader(new FileReader(file)); if (br.ready()) { flag = false; } } catch (FileNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } finally { if (null != br) { try { br.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } finally { br = null; } } } return flag; } public static boolean isFileEmpty4(File file) { return file.length() ==0L; } }
为了测试文件是否为空,新建多种文件类型的文件。
Note: 新建文件后,像zip文件它们的大小都不是0KB。
编写一个测试类:
package my.tool.file.util; import java.io.File; public class Main { public static void main(String[] args) { for(File file: new File("D: \\EmptyFileFolder").listFiles()) { System.out.print(file.getName()); System.out.print(" "); System.out.print(" is empty ? "); System.out.println(); System.out.println("Call method available in FileInputStream -->" + EmptyFileChecker.isFileEmpty1(file)); System.out.println("Call method ready in FileReader -->" + EmptyFileChecker.isFileEmpty2(file)); System.out.println("Call method ready in BufferedReader -->" + EmptyFileChecker.isFileEmpty3(file)); System.out.println("Call method length in File -->" + EmptyFileChecker.isFileEmpty4(file)); System.out.println(); } } }
输出的结果如下:
新建 BMP 图像.bmp is empty ?
Call method available in FileInputStream -->true
Call method ready in FileReader -->true
Call method ready in BufferedReader -->true
Call method length in File -->true
新建 Microsoft Office Access 2007 Database.accdb is empty ?
Call method available in FileInputStream -->false
Call method ready in FileReader -->false
Call method ready in BufferedReader -->false
Call method length in File -->false
新建 Microsoft Office Word Document.docx is empty ?
Call method available in FileInputStream -->true
Call method ready in FileReader -->true
Call method ready in BufferedReader -->true
Call method length in File -->true
新建 OpenDocument Drawing.odg is empty ?
Call method available in FileInputStream -->false
Call method ready in FileReader -->false
Call method ready in BufferedReader -->false
Call method length in File -->false
新建 OpenDocument Spreadsheet.ods is empty ?
Call method available in FileInputStream -->false
Call method ready in FileReader -->false
Call method ready in BufferedReader -->false
Call method length in File -->false
新建 压缩(zipped)文件夹.zip is empty ?
Call method available in FileInputStream -->false
Call method ready in FileReader -->false
Call method ready in BufferedReader -->false
Call method length in File -->false
新建 文本文档.txt is empty ?
Call method available in FileInputStream -->true
Call method ready in FileReader -->true
Call method ready in BufferedReader -->true
Call method length in File -->true
新建 波形声音.wav is empty ?
Call method available in FileInputStream -->false
Call method ready in FileReader -->false
Call method ready in BufferedReader -->false
Call method length in File -->false
结论: 通过File的length方法,FileInputStream的available方法或者是FileReader以及BufferedReader的ready方法,只有当新建的文件是0KB的时候,才能正确判断文件是否为空。如果新建后的文件有一定的大小,比如zip文件有1KB,这样的文件,如果想要知道文件里面有没有内容,只能采用其它方式来做。
发表评论
-
工厂类中移除if/else语句
2016-07-10 19:52 910面向对象语言的一个强大的特性是多态,它可以用来在代码中移除 ... -
Java编程练手100题
2014-12-11 17:13 6735本文给出100道Java编程练手的程序。 列表如下: 面 ... -
数组复制的三种方法
2014-11-30 12:57 2224本文将给出三种实现数组复制的方法 (以复制整数数组为例)。 ... -
数组复制的三种方法
2014-11-30 12:54 0本文将给出三种实现数组复制的方法 (以复制整数数组为例)。 ... -
四种复制文件的方法
2014-11-29 13:21 1746尽管Java提供了一个类ava.io.File用于文件的操 ... -
判断一个字符串中的字符是否都只出现一次
2014-11-25 12:58 2734本篇博文将给大家带来几个判断一个字符串中的字符是否都只出现一 ... -
使用正则表达式判断一个数是否为素数
2014-11-23 13:35 2175正则表达式能够用于判断一个数是否为素数,这个以前完全没有想过 ... -
几个可以用英文单词表达的正则表达式
2014-11-21 13:12 3759本文,我们将来看一下几个可以用英文单词表达的正则表达式。这些 ... -
(广度优先搜索)打印所有可能的括号组合
2014-11-20 11:58 1962问题:给定一个正整n,作为括号的对数,输出所有括号可能 ... -
随机产生由特殊字符,大小写字母以及数字组成的字符串,且每种字符都至少出现一次
2014-11-19 14:48 3985题目:随机产生字符串,字符串中的字符只能由特殊字符 (! ... -
找出1到n缺失的一个数
2014-11-18 12:57 3185题目:Problem description: You h ... -
EnumSet的几个例子
2014-11-14 16:24 8759EnumSet 是一个与枚举类型一起使用的专用 Set 实现 ... -
给定两个有序数组和一个指定的sum值,从两个数组中各找一个数使得这两个数的和与指定的sum值相差最小
2014-11-12 11:24 3336题目:给定两个有序数组和一个指定的sum值,从两个数组 ... -
Java面试编程题练手
2014-11-04 22:49 6707面试编程 写一个程序,去除有序数组中的重复数字 编 ... -
Collections用法整理
2014-10-22 20:55 9852Collections (java.util.Collect ... -
The Code Sample 代码实例 个人博客开通
2014-09-04 18:48 1424个人博客小站开通 http://thecodesample. ... -
Collections.emptyXXX方法
2014-06-08 13:37 2148从JDK 1.5开始, Collections集合工具类中预先 ... -
这代码怎么就打印出"hello world"了呢?
2014-06-08 00:37 7401for (long l = 4946144450195624L ... -
最短时间过桥
2014-04-21 22:03 4163本文用代码实现最短时间过桥,并且打印如下两个例子的最小过桥时间 ... -
将数组分割成差值最小的子集
2014-04-20 22:34 2907本文使用位掩码实现一个功能 ==》将数组分割成差值最小的子集 ...
相关推荐
一个空文件的大小通常为0字节。因此,我们可以通过检查File对象的size属性来确定文件是否为空。下面是一个简单的示例: ```javascript // 假设files是来自的FileList对象 let file = files[0]; // 检查文件大小 if...
文件大小可以通过传入的数值参数设定,生成的文件内容默认为空。 2. **内存缓冲区**:由于直接向大文件写入大量零字节可能会效率低下,因此通常会先在内存中创建一个缓冲区,一次性填充零字节,然后再将缓冲区写入...
判断文件类型的常见方法是通过检查文件的前几个字节,这些字节通常包含了文件的“魔数”或“签名”,它们是特定文件格式的标识。例如,JPEG图像文件通常以FF D8 FF E0或FF D8 FF E1开始,PDF文件以%PDF-开头,而ZIP...
本文将深入探讨一个具体的RESTful文件下载方法,并详细分析其实现原理。 #### 二、方法描述 根据提供的代码片段,我们可以看到这是一个基于Java的RESTful服务端点,用于处理文件下载请求。该方法定义在一个类中,...
- **性能分析**:识别可能导致性能瓶颈的方法调用链,如深度递归或者频繁调用的耗时方法。 - **重构建议**:提供自动化重构的建议,如提取重复代码,简化调用链,优化接口设计等。 JavaParser库还提供了其他功能,...
Vue提供了强大的前端开发架构,很多时候我们需要判断数据对象是否为空,使用typeof判断是个不错选择,具体代码见图。 补充知识:vue打包后 history模式 跟子目录 静态文件路径 分析 history 根目录 路由mode变为...
### Java判断文件编码的方法 在Java开发中,经常会遇到需要处理不同编码格式的文件的情况。为了确保程序能够正确解析文件内容,必须先判断文件的编码格式。本文将详细介绍如何使用Java来判断文件是否为UTF-8或GBK...
### C#读取导入Excel值为空的解决方法 在日常工作中,我们经常需要处理Excel文件,尤其是在企业级应用中,Excel文件的导入导出是非常常见的需求之一。而在使用C#进行Excel数据读取时,可能会遇到一些单元格值为空的...
本文将深入探讨Java中导入和判断Excel的使用方法,结合实例分析,帮助你全面理解这一技术。 首先,Java与Excel的交互通常依赖于第三方库,如Apache POI或JExcelAPI。Apache POI是目前最常用的一个,它提供了丰富的...
通过以上分析,我们不仅了解了如何使用C#来判断一个文件夹内是否存在子文件夹或文件,还深入探讨了目录拷贝与删除的具体实现方式。这些知识点对于处理文件系统相关的任务非常有用,能够帮助开发者更加高效地管理文件...
在这个场景中,开发者编写了一个Java程序,能够遍历HDFS中的所有文件和目录,并且能够识别并标记出空目录。以下是关于这些主题的详细解释: 1. **HDFS(Hadoop Distributed File System)**: HDFS是Apache Hadoop...
例如,对于文本文件,你可以决定是空文件、包含特定文字的文件,或者是随机字符生成的文件。对于图像文件,你可以指定分辨率、色彩深度等参数。对于音视频文件,可能需要设置编码参数,如比特率、帧率等。 此外,...
首先输入定义好的文法书写文件(所用的文法可以用LL(1)分析),先求出所输入的文法的每个非终结符是否能推出空,再分别计算非终结符号的FIRST集合,每个非终结符号的FOLLOW集合,以及每个规则的SELECT集合,并判断任意...
如果在操作过程中遇到任何识别不准确的情况,应根据实际操作环境和软件提示进行判断和修正,确保操作步骤的正确性。 最后,进行以上步骤后,DBC文件应该已经修复并能够被PCAN工具所应用,从而使用户能够进行正常的...
针对标题中提到的 "有空分析一下这个 Gerber 为什么不识别板框-2235.zip",我们可以深入探讨一些常见的原因以及解决办法。 1. **文件格式问题**:Gerber 文件必须遵循特定的规范,如 RS-274X 或者 X3.2。如果文件...
在这个项目中,我们有一个简单的词法分析器,其功能是接收输入的语言源代码,并生成一个名为“output”的文件,展示词法分析的结果。 词法分析器的工作原理通常是通过识别源代码中的模式,如关键字、标识符、常量、...
除了判断`$_FILES['file']['tmp_name']`不为空外,还应通过前端JavaScript增加用户体验,并在后端进行详细的文件类型检查、文件大小限制、病毒扫描等安全性检测。正确的做法是在整个文件上传流程中实施多重验证,以...
PIX4D空三引入流程是将使用PIX4D软件进行的空中三角测量(Aerial Triangulation,简称空三)成果导入其他GIS或测绘软件,以便进行后续的三维建模、地形测绘等工作的过程。这一流程包括了一系列严谨的步骤,确保数据...
flex语言是lex语言的实现,它提供了一种生成词法分析器的方法。我们可以使用flex语言编写一个词法分析器,然后使用flex.exe对其进行编译,得到一个C语言的源代码文件,该文件可以被编译成一个可执行文件,以便进行...