java判斷文件類型
⑴ java web 怎麼識別文件的類型
java web識純蠢別文件的類型是通過文件後綴識別的。
1、做答陪寫一個識別文件類型的方法:
public String (final String fileName) {
String fileType = "Undetermined";
final File file = new File(fileName);
try {
fileType = Files.probeContentType(file.toPath());舉銀
} catch (IOException ioException) {
out.println( "ERROR: Unable to determine file type for " + fileName + " e to exception " + ioException);
}
return fileType;
}
2、最常見的文件類型:
⑵ 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判斷文件類型是二進制文件還是文本文件
下面轉載一下別人的方法
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 程序中如何實現對RAR壓縮包文件中文件格式的判斷
分類: 電腦/網路 >> 程序設早辯計 >> 其他編程語言
問題描述:
JAVA 程序中如碼睜姿何實現對RAR壓縮包文件中文件格式的判斷?
解析:
JAVA中使用java.util.zip.ZipOutputStream在對文件進行壓縮時,將把每一個文件實體封裝為java.util.zip.ZipEntry,反之,在使用java.util.zip.ZipInputStream在對文件進行解壓縮時,每個文件遲絕的訪問也是通過訪問ZipEntry對象來操作的,可以通過ZipEntry對象的getName()來得到當初壓縮時對該文件的命名(通常為該文件相對路徑),當然得到了該文件命名自然就可以對文件格式進行判斷了!
⑸ java如何判斷文件是否為圖片
java中提供了ImageInputStream類來對文件是否為圖片進行判斷,示例如下:
/**
*判斷文件是否為圖片<br>
*<br>
*@parampInput文件名<br>
*@parampImgeFlag判斷具體文件類型<br>
*@return檢查後的結果<br>
*@throwsException
*/
publicstaticbooleanisPicture(StringpInput,
StringpImgeFlag)throwsException{
//文件名稱為空的場合
if(Check.isNull(pInput)){
//返回不和合法
returnfalse;
}
//獲得文件後綴名
StringtmpName=pInput.substring(pInput.lastIndexOf(".")+1,
pInput.length());
//聲明圖片後綴名數組
StringimgeArray[][]={
{"bmp","0"},{"dib","1"},{"gif","2"},
{"jfif","3"},{"jpe","4"},{"jpeg","5"},
{"jpg","6"},{"png","7"},{"tif","8"},
{"tiff","9"},{"ico","10"}
};
//遍歷名稱數組
for(inti=0;i<imgeArray.length;i++){
//判斷單個類型文件的場合
if(!Check.isNull(pImgeFlag)
&&imgeArray[i][0].equals(tmpName.toLowerCase())
&&imgeArray[i][1].equals(pImgeFlag)){
returntrue;
}
//判斷符合全部類型的場合
if(Check.isNull(pImgeFlag)
&&imgeArray[i][0].equals(tmpName.toLowerCase())){
returntrue;
}
}
returnfalse;
}
⑹ 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如何判斷http鏈接是否是具體的文件
需要根據鏈接來獲取文件類型,將內容正確存儲。
http://img12.360buyimg.com/da/20120330/88_31_ZySDre.jpg
這個鏈接指向的文件就是個jpg文件。但是州仿滑後來發現有諸如
http://jprice.360buyimg.com/getSkuPriceImgService.action?skuId=1850001109&origin=1&webSite=1&type=1的鏈接,這招就不靈了。後來谷歌網路了一下也沒發現解決辦法。後來機緣巧合在Java Network Programming上找到了一個辦法:
URLConnection class provides two static methods to help programs figure out the MIME type of some data; you can use these if the content type just isn't available or if you have reason to believe that the content type you're given isn't correct。
就是說URLConnection提供了兩種方法可以猜測(根據實測結果,這個猜測是相當的准)數據的MIME類型。
第一個是:
public static String guessContentTypeFromName(String name)
這個方法根據URL文冊臘件部分的後綴名來判斷類型,跟之前我的方法一樣。這個不能解決上面那個問題。
第二個是:
public static String guessContentTypeFromStream(InputStream in)
這個方法是根據流的前面幾個位元組來判斷類型,這個就不需要文件後綴名了,完全可以解大腔決上面那個問題。
⑻ java 傳輸 獲取文件類型
獲取文件類型,一般的是列出目前所有的文件類型,根據表頭進行相應判斷,示例如下:
/**
*件頭是位於文件開頭的一段承擔一定任務的數據,一般都在開頭的部分。
*頭文件作為一種包含功能函數、數據介面聲明的載體文件,用於保存程序的聲明(declaration),而定義文件用於保存程序的實現(implementation)。
*為了解決在用戶上傳文件的時候在伺服器端判斷文件類型的問題,故用獲取文件頭的方式,直接讀取文件的前幾個位元組,來判斷上傳文件是否符合格式。具體代碼如下:
*Java代碼:
*
*/
packagecom.yonyou.sud.file;
importjava.io.FileInputStream;
importjava.io.IOException;
importjava.util.HashMap;
/**
*獲取和判斷文件頭信息
*
*@authorSud
*
*/
publicclassGetTypeByHead{
//緩存文件頭信息-文件頭信息
publicstaticfinalHashMap<String,String>mFileTypes=newHashMap<String,String>();
static{
//images
mFileTypes.put("FFD8FF","jpg");
mFileTypes.put("89504E47","png");
mFileTypes.put("47494638","gif");
mFileTypes.put("49492A00","tif");
mFileTypes.put("424D","bmp");
//
mFileTypes.put("41433130","dwg");//CAD
mFileTypes.put("38425053","psd");
mFileTypes.put("7B5C727466","rtf");//日記本
mFileTypes.put("3C3F786D6C","xml");
mFileTypes.put("68746D6C3E","html");
mFileTypes.put("44656C69766572792D646174653A","eml");//郵件
mFileTypes.put("D0CF11E0","doc");
mFileTypes.put("5374616E64617264204A","mdb");
mFileTypes.put("252150532D41646F6265","ps");
mFileTypes.put("255044462D312E","pdf");
mFileTypes.put("504B0304","docx");
mFileTypes.put("7221","rar");
mFileTypes.put("57415645","wav");
mFileTypes.put("41564920","avi");
mFileTypes.put("2E524D46","rm");
mFileTypes.put("000001BA","mpg");
mFileTypes.put("000001B3","mpg");
mFileTypes.put("6D6F6F76","mov");
mFileTypes.put("3026B2758E66CF11","asf");
mFileTypes.put("4D546864","mid");
mFileTypes.put("1F8B08","gz");
}
/**
*根據文件路徑獲取文件頭信息
*
*@paramfilePath
*文件路徑
*@return文件頭信息
*/
publicstaticStringgetFileType(StringfilePath){
System.out.println(getFileHeader(filePath));
System.out.println(mFileTypes.get(getFileHeader(filePath)));
returnmFileTypes.get(getFileHeader(filePath));
}
/**
*根據文件路徑獲取文件頭信息
*
*@paramfilePath
*文件路徑
*@return文件頭信息
*/
(StringfilePath){
FileInputStreamis=null;
Stringvalue=null;
try{
is=newFileInputStream(filePath);
byte[]b=newbyte[4];
/*intread()從此輸入流中讀取一個數據位元組。
*intread(byte[]b)從此輸入流中將最多b.length個位元組的數據讀入一個byte數組中。
*intread(byte[]b,intoff,intlen)從此輸入流中將最多len個位元組的數據讀入一個byte數組中。
*/
is.read(b,0,b.length);
value=bytesToHexString(b);
}catch(Exceptione){
}finally{
if(null!=is){
try{
is.close();
}catch(IOExceptione){
}
}
}
returnvalue;
}
/**
*將要讀取文件頭信息的文件的byte數組轉換成string類型表示
*
*@paramsrc
*要讀取文件頭信息的文件的byte數組
*@return文件頭信息
*/
(byte[]src){
StringBuilderbuilder=newStringBuilder();
if(src==null||src.length<=0){
returnnull;
}
Stringhv;
for(inti=0;i<src.length;i++){
//以十六進制(基數16)無符號整數形式返回一個整數參數的字元串表示形式,並轉換為大寫
hv=Integer.toHexString(src[i]&0xFF).toUpperCase();
if(hv.length()<2){
builder.append(0);
}
builder.append(hv);
}
System.out.println(builder.toString());
returnbuilder.toString();
}
publicstaticvoidmain(String[]args)throwsException{
finalStringfileType=getFileType("E:/Java編程思想讀書筆記.docx");
System.out.println(fileType);
}
}