当前位置:首页 » 编程语言 » java判断文件的类型

java判断文件的类型

发布时间: 2023-08-24 07:18:35

‘壹’ java判断文件类型是二进制文件还是文本文件

下面转载一下别人的方法

1、判断字符范围。
该方式主要是帆镇针对英文字符的,如果文件中有中文字符就会判断失败。比如:

char c;
f.read(&c, sizeof(c));
if (c < 32 && c != 9 && c != 10 && c != 13)
{
return;
}

该方式针对256以下的字符问题都不大,一旦遇到双字节中文就会出现c为负数的情况,导致判断烂轿搏失败。

2、判断有没有char(0)字符。
二进制文件基本上都会饥祥有char(0),注意,是“基本上” 。
我尝试通过这个方式来判断,发现判断正确率很高,我手头的二进制STL文件都能够判断正确,但是总觉得这种方式不够保险,如果刚好某个二进制文件没有char(0)怎么办???

3、文件大小对比法。
以文本方式 打开文件,取一段数据(比如1024字节),存为string,再写入tmp文件,如果新文件的大小还是1024字节,应该就是文本文件了。否则就是二进制文件。
该方法我没有认证,但是纯粹从描述上来说,还是比较有效的。以我的理解,该方法在本质上还是方法1和方法2的结合,相比方法1来说,方便了中文字符的判断,相比方法2来说,更为保险一些。其本质就是通过将二进制文件转换为字符串,将一些无效字符过滤掉(比如char(0),回车等等),导致大小发生变化。但同样的该方法也有漏洞,如果二进制文件中刚好没有回车,没有char(0)怎么办???

4、无效字符比例法。
该方法是基于方法1的一种概率判断,遍历文件中的所有字符,对方法1中认定的无效字符进行计数,如果无效字符数量达到一定比例(这个比例值是经验值,根据自己的程序运行环境自由设定),则认为是二进制文件。
同方法1一样,无法对中文字符进行有效的判断,一个全为中文的文本文件,肯定会被认定为二进制文件。

5、严格对比法。
逐字节读取,然后满足以下任何一个条件那么就是二进制文件:
1)所读取字节大于127并且小于160;
2)所读取字节大于等于160并且不成对出现;(注:大于等于160并成对出现的是汉字,其他UNICODE字符集编码格式不是很清楚)
3)所读取字节小于32并且不等于9(TAB)、10(换行) (注: 10 是UNIX格式文本换行)
4)所读取字节小于32并且等于13(回车)但是之后的字节并不是10(换行) (注:13 10 是DOS格式文本换行)
该方法是最严谨的,也是判断最复杂的,效率最低的,一个较大的文件判断起来肯定会很慢。

‘贰’ java代码怎么判断文件的格式是excel文件

匹配后缀名。

String.endsWith(".xls");
xls
xlsx
xlsm

1.两点需要注意

1.string.spilt("\.")分割字符串成子字符串数组,以“.”分割,必须写成string.spilt("\.")的方式,不能写成string.spilt(".")。斜线必须是反斜线且。

2.获取分割后的字符串数组,要获得最后一个item的index ,方式是int suffixIndex = strArray.length -1;

publicStringgetFileType(StringfileName){
String[]strArray=fileName.split("\.");
intsuffixIndex=strArray.length-1;
System.out.println(strArray[suffixIndex]);
return"strArray[suffixIndex]";
}

‘叁’ JAVA 程序中如何实现对RAR压缩包文件中文件格式的判断

分类: 电脑/网络 >> 程序设早辩计 >> 其他编程语言
问题描述:

JAVA 程序中如码睁姿何实现对RAR压缩包文件中文件格式的判断?

解析:

JAVA中使用java.util.zip.ZipOutputStream在对文件进行压缩时,将把每一个文件实体封装为java.util.zip.ZipEntry,反之,在使用java.util.zip.ZipInputStream在对文件进行解压缩时,每个文件迟绝的访问也是通过访问ZipEntry对象来操作的,可以通过ZipEntry对象的getName()来得到当初压缩时对该文件的命名(通常为该文件相对路径),当然得到了该文件命名自然就可以对文件格式进行判断了!

‘肆’ Java中怎么获取文件类型

import java.awt.EventQueue;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;
import java.util.Scanner;

import javax.swing.JButton;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextArea;
import javax.swing.JTextField;
import javax.swing.border.EmptyBorder;

public class CheckFileType extends JFrame {

/**
*
*/
private static final long serialVersionUID = -6167144370965431657L;
private JPanel contentPane;
private JTextField textField;
private JTextArea textArea;

/**
* Create the frame.
*/
public CheckFileType() {
setTitle("\u5224\u65AD\u6587\u4EF6\u7C7B\u578B");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setBounds(100, 100, 501, 143);
contentPane = new JPanel();
contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
setContentPane(contentPane);
contentPane.setLayout(null);

JLabel label = new JLabel("\u9009\u62E9\u6587\u4EF6\uFF1A");
label.setBounds(10, 10, 84, 15);
contentPane.add(label);

textField = new JTextField();
textField.setBounds(88, 2, 289, 30);
contentPane.add(textField);
textField.setColumns(10);

JButton button = new JButton("\u6D4F\u89C8\u2026\u2026");
button.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
do_button_actionPerformed(e);
}
});
button.setBounds(389, 2, 90, 30);
contentPane.add(button);

textArea = new JTextArea();
textArea.setOpaque(false);
textArea.setEditable(false);
textArea.setLineWrap(true);
textArea.setBounds(83, 37, 396, 60);
contentPane.add(textArea);
}

protected void do_button_actionPerformed(ActionEvent e) {
Scanner scan = new Scanner(getClass()// 获取说明文件的扫描器 在文件中获得
.getResourceAsStream("extName.inf"));
JFileChooser chooser = new JFileChooser();// 创建文件选择器
boolean searched = false;
int option = chooser.showOpenDialog(this);// 打开文件选择对话框
if (option == JFileChooser.APPROVE_OPTION) {// 如果正确选择文件
File file = chooser.getSelectedFile();// 获取用户选择文件
textField.setText(file.getName());// 把文件名添加到文本框
String name = file.getName();// 获取文件名
while (scan.hasNextLine()) { // 遍历说明文件
String line = scan.nextLine();// 获取一行说明信息
String[] extInfo = line.split("\t");// 把单行说明信息拆分成数组
// 数组第一个元素是文件扩展名,与用户选择文件名对比
if (name.endsWith(extInfo[0])) {
// 第二个数组元素是文件类型的说明信息,添加到文本域控件中
textArea.setText(extInfo[1]);
searched = true;
}
}
scan.close();// 关闭扫描器
}
if (!searched) {// 如果没找到相关文件类型的说明,则提示用户
textArea.setText("你选择的文件类型没有相应记录,你可以在extName.info文件中添加该类型的描述。");
}
}
/**
* Launch the application.
*/
public static void main(String[] args) {
try {
EventQueue.invokeLater(new Runnable() {
public void run() {
CheckFileType frame = new CheckFileType();
frame.setVisible(true);
}
});
} catch (Exception e) {
e.printStackTrace();
}
}
}

辅助文件
.txt您选择的是计算机中的文本文件,值包含文本内容,没有特殊格式代码,用任何文档编辑器都可以打开。
.ini程序的配置文件,是针对某个应用程序所附带的配置信息。
.exeWindows系统中的可执行文件,是程序的入口,可以直接执行,不需要其他辅助工具。
.doc文档文件,Word97-2003都使用这种格式
.docx文档文件,Word2007采用这种格式。
.bmp位图图片文件,用于保存位图的图像,是Windows系统默认支持的一种图片格式。
.jpg压缩格式的图片文件,它的提及更小,更加利于网络传输或作为网页点缀。
.jpeg压缩格式的图片文件,它的提及更小,更加利于网络传输或作为网页点缀。
.dllWindows系统中的动态链接库文件,它是应用程序的扩展,为程序提供更多的功能模块。
.phpPhp开发的网页文件。
.jspJava开发的网页文件。
.javaJava语言的源代码文件。
.rar压缩文档文件,其格式为RAR,是一种非常流行的压缩格式,压缩率很高,而且可以为压缩文档设置密码,可以创建自解压的压缩文档。

‘伍’ 用Java实现获取文件类型的方法。

主要以下几种方法:

这个MimetypesFileMap类会映射出一个file的Mime Type,这些Mime Type类型是在activation.jar包里面的资源文件中定义的

importjavax.activation.MimetypesFileTypeMap;
importjava.io.File;

classGetMimeType{
publicstaticvoidmain(Stringargs[]){
Filef=newFile("test.gif");
System.out.println("MimeTypeof"+f.getName()+"is"+
newMimetypesFileTypeMap().getContentType(f));
//expectedoutput:
//"MimeTypeoftest.gifisimage/gif"
}
}

使用 java.net.URL
警告:这个方法非常慢
与上面所说的匹配后缀名类似。后缀名和mime-type的映射关系被定义在[jre_home]libcontent-types.properties这个文件中

importjava.net.*;

publicclassFileUtils{
publicstaticStringgetMimeType(StringfileUrl)
throwsjava.io.IOException,MalformedURLException
{
Stringtype=null;
URLu=newURL(fileUrl);
URLConnectionuc=null;
uc=u.openConnection();
type=uc.getContentType();
returntype;
}

publicstaticvoidmain(Stringargs[])throwsException{
System.out.println(FileUtils.getMimeType("file://c:/temp/test.TXT"));
//output:text/plain
}
}

还有一种方式:就是取文件名最后一个“.”后的内容,通过人来判断如

String fileName = "aaa.txt";

String fileType =“txt”//通过方法取出方法类型为

String type = "";

if( fileTyep.equals("txt")){

type = "记事本";

}else if(fileTyep.equals("img")){

type = "img图片";

}。。。。。

‘陆’ java 判断文件类型

简单实现如下:
import java.io.*;
/*通常用在从客户到服务端传送的判断
先用getName()获得文件的名字,这个市File的自带方法。然后那名字给一个String对象,用下面的方法得到文件的扩展名。

*/

public class Rename{

public String getTypeName(String s){
String s1=s.substring(s.indexOf(".")+1,s.length());
if(s1.indexOf(".")>=0){
s=s1;
Rename sf=new Rename();
s=sf.getTypeName(s);
}
return s.substring(s.indexOf("."),s.length());
}

}

‘柒’ 如何用java判断一个url是不是PDF类型的文件

我不知道该如何判断  但我有一个很笨的方法
如果是一个下载文件 后台会有下面的操作(J2EE,其他平台也一样,答改重点是括号里面的参数)
res.setContentType("application/x-download;charset=gbk");
res.setHeader("Content-Disposition" ,"attachment;filename=test.pdf");
得到链接之后需要访问每个链接 使用socket的输入流获差悄取每个链接的头信息  根据头信息判断是否为pdf文件
但这样有一个bug  有些网站给文件取名字不一定就是以真正文件的后缀名结尾 
其次 一些压缩文件里面可能也有pdf文清庆判件  这样的pdf文件是搜索不出来的

热点内容
死神脚本 发布:2025-02-04 21:57:03 浏览:165
phpposthtml 发布:2025-02-04 21:37:46 浏览:87
最新asp源码 发布:2025-02-04 21:17:33 浏览:570
让linux死机 发布:2025-02-04 20:48:08 浏览:141
单方块生存服务器里如何获取岩浆 发布:2025-02-04 20:48:07 浏览:785
快速指数算法 发布:2025-02-04 20:20:40 浏览:299
python在类中定义函数调用函数 发布:2025-02-04 20:14:47 浏览:596
安卓手机的壁纸是哪个 发布:2025-02-04 20:14:44 浏览:202
java发展前景 发布:2025-02-04 20:10:19 浏览:77
mac登陆密码哪里设置 发布:2025-02-04 19:50:20 浏览:526