`
IvanLi
  • 浏览: 605196 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

java中如何判断一个文件是二进制文件还是文本文件?

阅读更多
现在的做法是把文件读进来,逐个解析每一个byte,如果有一个byte<0那么断定这个文件是二进制的,这在纯英文的环境下可以工作,但是如果一个文本包含了中文字符,那么这个文件也会被判断为二进制文件。
我在网上看看到有人也是逐个比较每一个byte,只不过是如果有一个byte=0就判断为二进制文件,这样做有依据吗?
大家有没有什么解决办法?
分享到:
评论
16 楼 IvanLi 2006-12-14  
lijiangt 写道
在linux或者unix系统用file命令就可以打印文件的类型,估计是读取文件头部信息,楼主可以去看看file源代码,应该有所收获。

试了一下file命令,果然能分出绝大多数的文件类型,找源码来看过后再发表意见,我判断是否试文本文件的目的是文本比较,在比较两个文件之前先判断是否是文本文件,如果不是就不比较了,判断后缀名能够满足大部分需求,但是维护已知文件后缀总是觉得不是完全之策,比如再unix下有的文件根本没有后缀也是文本文件,这样岂不是就有了漏网之鱼
15 楼 lixigua 2006-12-14  
仅仅判断前两位不够,我检查过各种执行文件,头两行都是:
4D 5A 90 00 03 00 00 00 04  00 00  00 FF FF 00 00 B8 ***
但是如forxmail,EDiary 则是4D 5A 50,这个是有规律的,可仔细探索下。
4D 5A 90是MZ格式,4D 5A 50大家叫他MZP. -----  这个说法针对win有效,对unix,linux无效

别人的贴看到的另一种判断法(我没证实是否有效):
逐字节读取,然后满足以下任何一个条件那么就是二进制文件:
1、所读取字节大于127并且小于160;
2、所读取字节大于等于160并且不成对出现;(注:大于等于160并成对出现的是汉字,其他UNICODE字符集编码格式不是很清楚)
3、所读取字节小于32并且不等于9(TAB)、10(换行) (注: 10 是UNIX格式文本换行)
4、所读取字节小于32并且等于13(回车)但是之后的字节并不是10(换行) (注:13 10 是DOS格式文本换行)



投新手贴的人确实太不厚道。
14 楼 lixigua 2006-12-14  
要检查是否可执行文件/动态连接库,检查头是否: 4D 5A
检查是否JPG,头文件是否:FF D8 FF E0
每种格式的头文件都是固定的,搂住说“二进制”是有问题的,我估计搂住想问的是:如何判断是否可执行文件?
13 楼 together 2006-12-14  
lijiangt 写道
在linux或者unix系统用file命令就可以打印文件的类型,估计是读取文件头部信息,楼主可以去看看file源代码,应该有所收获。

嗯,这个回复是最靠边的,不错。
可不可以这么说,用文本编辑器(如记事本)能正常编辑的,就是文本文件。
12 楼 qiezi 2006-12-14  
together 写道
投新手的19票,差不多是一个资深会员的。
简单一点的通过后缀名就可以判断。再深入一点,可以以文本方式打开文件,存为string,再写入新文件,如果新旧文件的大小一样,应该就是文本文件了。否则就是二进制文件。

你这只能检查出\0字符。
11 楼 lijiangt 2006-12-13  
在linux或者unix系统用file命令就可以打印文件的类型,估计是读取文件头部信息,楼主可以去看看file源代码,应该有所收获。
10 楼 IvanLi 2006-12-13  
together 写道
投新手的19票,差不多是一个资深会员的。
简单一点的通过后缀名就可以判断。再深入一点,可以以文本方式打开文件,存为string,再写入新文件,如果新旧文件的大小一样,应该就是文本文件了。否则就是二进制文件。

恩,这倒是一个方法,可以不用全读,只读1024字节,然后存成String,写入tmp文件,在判断新旧是否一样大
9 楼 together 2006-12-13  
投新手的19票,差不多是一个资深会员的。
简单一点的通过后缀名就可以判断。再深入一点,可以以文本方式打开文件,存为string,再写入新文件,如果新旧文件的大小一样,应该就是文本文件了。否则就是二进制文件。
8 楼 IvanLi 2006-12-13  
在英文环境下还是很简单的,判断每个byte的值,如果不是byte的值不是在32-127之间,同时又不是回车或换行的化,就认为它是二进值的就可以,但是如果又英文字符,就很难判断了
7 楼 netfishx 2006-12-13  
还是根据后缀名靠谱,文本文件本质上也是二进制的。

btw:投新手的确实不厚道
6 楼 xly_971223 2006-12-13  
个人认为这个很难 都是二进制数据 如果没有人告诉你是文本或者二进制 那根本无法知道这个二进制数据到底是什么意义?
就像 告诉你01010001 问这是什么意思? 谁也不能准确回答
5 楼 IvanLi 2006-12-13  
对是文件版本控制,这倒是一个解决的办法,从文件byte读就没办法了吗?
4 楼 Readonly 2006-12-13  
Ivan Li 写道
文件比较,如果是二进制的就不比较了

具体做什么功能的,版本控制系统?
系统给个默认的文本文件后缀名列表,比如txt, xml, jsp等等,不在这个列表上的统一认为二进制,当然用户可以根据实际需求添加修改这个列表。
3 楼 IvanLi 2006-12-13  
投新手贴的人我觉得不厚道!
2 楼 IvanLi 2006-12-13  
文件比较,如果是二进制的就不比较了
1 楼 Readonly 2006-12-13  
判断这个干什么用?

相关推荐

    java 将文件中二进制文件转换成文本文本文件并输出

    在Java编程语言中,将二进制文件转换为文本文档通常涉及到字符编码的理解和处理。二进制文件可以包含任何类型的数据,如图像、音频、视频或纯文本,但以非可读格式存储。而文本文档通常使用特定的字符编码(如ASCII...

    java 二进制文件的读写操作

    在Java中,进行二进制文件的读写操作是非常常见的需求,尤其是在处理非文本类型的文件(如图片、音频或视频等)时。本文将详细介绍如何使用`FileInputStream`和`FileOutputStream`类来实现二进制文件的读写,并提供...

    JavaScript读二进制文件并用ajax传输二进制流的方法

    在JavaScript中,处理二进制文件并使用Ajax传输二进制流是一项常见的任务,尤其是在进行文件上传或数据传输时。由于浏览器之间的差异,实现这一功能需要考虑不同的API和兼容性问题。以下是一份详细的指南,涵盖了...

    java判断一个文件是否为二进制文件的方法

    在Java编程中,判断一个文件是否为二进制文件是一个常见的需求,这通常涉及到文件的读取和编码分析。二进制文件与文本文件的主要区别在于它们的数据存储方式:二进制文件通常包含非打印字符,如图像、音频、视频等非...

    java二进制读取文本文件

    用二进制流的方式读取本地文本文件.txt

    读取二进制文件,JframeChart曲线图,查看文件修改时间

    1. **读取二进制文件**:二进制文件是一种非文本文件,通常包含计算机可以直接理解和处理的数据,如图片、音频、视频或程序文件。在Java中,读取二进制文件通常使用`java.io`包中的`FileInputStream`类。通过创建`...

    文件转换为二进制流

    文本字符串与byte[], 整个物理文件与byte[], 物理文件内容与byte[], stream与byty[] 之间的相互转换。 从磁盘读取文件,将文件写入磁盘。

    java读取二进制文件

    ### Java读取二进制文件知识点详解 #### 一、二进制文件基本概念 在计算机科学中,二进制文件是由一系列字节组成的文件,这些字节可以表示任何类型的数据,包括文本、图像、音频等。二进制文件与文本文件的主要区别...

    打开二进制的软件 java

    在源码实现中,你可能需要定义一个方法来读取二进制文件,一个方法来修改二进制数据,以及一个方法来写回修改后的数据。每个方法都要考虑到异常处理,确保数据的安全性。 总的来说,Java提供了丰富的工具来处理二...

    HTTP二进制

    在这样的系统中,可能会涉及到上传和下载二进制文件,例如合同文档、图片等。通常,这类系统会提供API接口,允许用户通过HTTP请求提交或获取二进制数据,并且需要正确处理“Content-Type”头部以确保数据的正确解析...

    Java二进制IO类与文件复制操作实例

    本篇文章将深入探讨Java中的二进制IO类,并通过一个具体的文件复制操作实例来说明其应用。 1. **Java IO流基础** Java的IO流模型基于“流”的概念,数据被当作一串连续的数据流进行处理。IO流分为两类:字节流...

    二进制文件合并工具

    2. **合并的动机**:二进制文件合并可能出于多种原因,如在软件开发中,可能需要将多个模块或库合并到一个可执行文件中;在数据存储中,可能为了减少读取时间,将分散的数据块整合在一起;在游戏开发中,可能将多个...

    读取文件中的二进制文件 将输出到新的文件夹里

    在IT行业中,处理二进制文件是一项常见的...总的来说,Java提供了丰富的API来处理二进制文件,无论是读取、写入还是转换。在实际应用中,我们需要根据具体需求选择合适的工具和方法,确保数据的准确无误地传输和处理。

    二进制文件的读取与写入

    在计算机科学中,二进制文件是存储非文本数据(如图像、音频、视频或程序)的文件,这些数据以二进制格式排列。与文本文件不同,它们不使用字符编码,而是直接存储原始字节流。二进制文件的读取和写入是编程中的重要...

    java 判断二进制文件的方法

    在Java编程中,判断一个文件是否为二进制文件是一个常见的需求。二进制文件与文本文件的主要区别在于它们的数据编码方式。文本文件通常使用字符编码(如ASCII或UTF-8),而二进制文件则包含任何可能的字节序列,可能...

    JAVA读写二进制文件

    在Java编程语言中,处理二进制文件是常见的任务,特别是在需要存储图像、音频、视频或者任何非文本数据时。二进制文件读写涉及到字节流操作,因为它们不处理字符而是直接处理字节。下面我们将深入探讨如何在Java中...

    读二进制文件数据管理系统

    在本场景中,MIS可能是指该二进制文件数据管理系统作为企业管理信息的一个组成部分,用于支持决策制定和业务流程。 综上所述,"读二进制文件数据管理系统"涉及了文件系统操作、二进制数据处理、数据库交互、报表...

    中文转二进制的Java小工具

    下面是一个简单的Java代码示例,演示如何将一个包含中文字符的字符串转换为二进制: ```java public class ChineseToBinary { public static void main(String[] args) { String chineseString = "你好,世界"; /...

    华为CDR话单二进制文件转换成对应的可读文件txt格式

    二进制文件是计算机系统中存储数据的一种方式,其中的数据以字节或比特的形式存在,对于人类来说并不直观。为了转化,我们需要知道华为CDR话单的二进制结构,包括字段的位数、排列顺序以及每个字段的含义。这通常...

    上传下载二进制流文件

    二进制流是指一系列连续的二进制数据,它可以是任何类型的数据,如图片、音频、视频或文本文件等。在C#中,System.IO命名空间提供了一系列类来处理二进制流,如FileStream、MemoryStream和NetworkStream等。 **文件...

Global site tag (gtag.js) - Google Analytics