java获取文件属性Word格式文档下载.docx
《java获取文件属性Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《java获取文件属性Word格式文档下载.docx(11页珍藏版)》请在冰豆网上搜索。
得余数为"
4"
,最后将其加"
1"
并作为"
2"
的幂,最终就是"
32"
2^(196%8+1)=32"
【其它格式图片参上】
图
(1)
2、JPG图片
JPG图片格式标识符为"
JFIF"
,而且其信息位置不变。
但高度、宽度和色彩数信息位置不太确定,但他们是连续一起的。
如下两图
(2)[例如761×
150×
16MJPG]和图(3)[例如1984×
1384×
16MJPG]所示,并且不止这两种情况。
现就图
(2)作一些补充说明:
红色框内每两位分别显示其高度和宽度信息,并从左往右读取,则分别为"
0096"
02F9"
150"
761"
,也就是图片的高度和宽度;
03"
,然后进行乘以"
得"
24"
,最后将其作为"
16M"
2^(3*8+1)=16M"
不过,好像JPG图片的色彩数一般都是"
?
!
图
(2)
图(3)
注意:
为了避免上述多种的情况的发生,从而导致我们处理非常麻烦,本人发现一个小小的技巧。
利用Win操作系统自带的画图工具打开"
JPG"
文件,之后,不需作任何改变,只要保存替换即可。
这时一个戏剧性的变化出来了,其高度、宽度和色彩数信息位置都变得跟图
(2)类似,即图(4)是由图(3)变化二来的。
图(4)
3、BMP图片
BMP图片格式标识符为"
BM"
,但其格式、宽度、高度和色彩数信息位置不变,但宽度、高度和色彩数信息位置是不连续的。
如下图(5)[例如352×
288×
16MBMP]所示。
现就图(5)作一些补充说明:
红色框内每两位分别显示其宽度和高度信息,并从右往左读取,则分别为"
0160"
0120"
352"
288"
,然后将其作为"
2^(24)=16M"
图(5)
4、PNG图片
PNG图片格式标识符为"
PNG"
,但其格式、宽度和高度信息位置不变,但宽度和高度信息位置是不连续的。
如下图(6)[例如18×
16×
16MPNG]所示。
由于其跟BMP图片非常相似,故不作重复说明。
三、源代码及其说明
源代码由两部分组成,即两个文件组成。
其一为"
PicsModel.java"
,主要存储图片的相关信息;
其二位"
readpic.java"
,获取图片的相关信息,是本文的重点所在。
详细代码如下:
PicsModel.java代码:
/*****************************************************************
*Filename:
PicsModel.java
*Createdate:
2003-11-18
*Copyright:
Copyright(c)2003byHEKAI
*@Version:
1.0
*ModifyHistory
*AuthorDateDescription
*hekai2003-11-18CreatethePicsModel.java
*****************************************************************/
//请用你的相应包名进行替换
packagebmptest;
importjava.io.Serializable;
publicclassPicsModelimplementsSerializable
{
privateStringpicsExtendName=null;
privateintpicsWidth=0;
privateintpicsHeight=0;
privateStringpicsColor=null;
privateStringpicsSize=null;
publicPicsModel()
{
}
publicStringgetpicsExtendName()
returnpicsExtendName;
publicvoidsetpicsExtendName(StringpicsExtendName)
this.picsExtendName=picsExtendName;
publicintgetpicsWidth()
returnpicsWidth;
publicvoidsetpicsWidth(intpicsWidth)
this.picsWidth=picsWidth;
publicintgetpicsHeight()
returnpicsHeight;
}
publicvoidsetpicsHeight(intpicsHeight)
this.picsHeight=picsHeight;
publicStringgetpicsColor()
returnpicsColor;
publicvoidsetpicsColor(StringpicsColor)
this.picsColor=picsColor;
publicStringgetpicsSize()
returnpicsSize;
publicvoidsetpicsSize(StringpicsSize)
this.picsSize=picsSize;
}
readpic.java代码:
readpic.java
*hekai2003-11-18Createthereadpic.java
importjava.io.*;
publicclassreadpic
publicstaticvoidmain(String[]args)
PicsModelmodel=getFileAttributes("
E:
/hekai/hk0001.jpg"
);
//"
\\hekai\\hk0001.jpg"
也是可以的
System.out.println("
picextendnameis:
"
+model.getpicsExtendName());
picwidthis:
+model.getpicsWidth());
picheightis:
+model.getpicsHeight());
piccolor:
+model.getpicsColor());
picsize:
+model.getpicsSize());
privatestaticPicsModelgetFileAttributes(Stringpicpath)
PicsModelmodel=null;
Stringpicextendname;
picextendname=null;
byte[]content=null;
try
{
content=readFromFile(picpath);
intk;
k=content.length;
//不想处理的话,请直接获取其字节数
Integerkk;
kk=null;
Stringpicsize;
picsize=null;
if(k>
=1024)
{
//biggerthanfactpicfilesizes
k=k/1024+1;
kk=newInteger(k);
picsize=kk.toString()+"
K"
;
}
elseif(k>
0)
picsize=kk.toString();
model=newPicsModel();
model.setpicsSize(picsize);
}
catch(IOExceptione)
content=newbyte[0];
e.printStackTrace();
picextendname=getFileExtendName(content);
intpicwidth,picheight,color;
Stringpiccolor;
picwidth=0;
picheight=0;
color=0;
piccolor=null;
if(picextendname.equals("
))
//picwidthposition
picwidth=getFileAttribute(content,7,2,picextendname);
//picheightposition
picheight=getFileAttribute(content,9,2,picextendname);
//piccolorposition
color=getFileAttribute(content,10,1,picextendname);
color=color%8+1;
piccolor=getPicColor(color);
//考虑了两种情况
picwidth=getFileAttribute(content,166,2,picextendname);
picheight=getFileAttribute(content,164,2,picextendname);
color=getFileAttribute(content,167,1,picextendname);
color=color*8;
if((picwidth==0)||(picheight==0)||(Color>
3))
picwidth=getFileAttribute(content,197,2,picextendname);
picheight=getFileAttribute(content,195,2,picextendname);
color=getFileAttribute(content,198,1,picextendname);
color=color*8;
BMP"
picwidth=getFileAttribute(content,19,2,picextendname);
picheight=getFileAttribute(content,23,2,picextendname);
color=getFileAttribute(content,28,1,picextendname);
//usuallyis"
?
piccolor="
model.setpicsExtendName(picextendname);
model.setpicsWidth(picwidth);
model.setpicsHeight(picheight);
model.setpicsColor(piccolor);
returnmodel;
privatestaticbyte[]readFromFile(StringfileName)throwsIOException
FileInputStreamfin=newFileInputStream(fileName);
byte[]buf=newbyte[fin.available()];
fin.read(buf);
fin.close();
returnbuf;
privatestaticStringgetFileExtendName(byte[]byte1)
StringstrFileExtendName;
strFileExtendName=null;
//headerbytescontainsGIF87aorGIF89a?
if((byte1[0]==71)&
&
(byte1[1]==73)&
(byte1[2]==70)&
(byte1[3]==56)&
((byte1[4]==55)||(byte1[4]==57))&
(byte1[5]==97))
strFileExtendName="
//headerbytescontainsJFIF?
if((byte1[6]==74)&
(byte1[7]==70)&
(byte1[8]==73)&
(byte1[9]==70))
//headerbytescontainsBM?
if((byte1[0]==66)&
(byte1[1]==77))
//headerbytescontainsPNG?
if((byte1[1]==80)&
(byte1[2]==78)&
(byte1[3]==71))
returnstrFileExtendName;
privatestaticintgetFileAttribute(byte[]byte2,intn,intm,Stringfileextendname)
intj,FileAttributeValue;
j=0;
FileAttributeValue=0;
Stringstr,str1;
str="
str1="
//如果其大于127,则反之出现少于0,需要进行+256运算
for(intk=0;
k<
m;
k++)
if(byte2[n-k]<
j=byte2[n-k];
j=j+256;
else
str1=Integer.toHexString(j);
//转化为16进制,不足位补0
if(str1.length()<
2)
str1="
0"
+str1;
//格式的不同,表达属性的字节也有变化
if(fileextendname.equalsIgnoreCase("
)||fileextendname.equalsIgnoreCase("
str=str1+str;
str=str+str1;
FileAttributeValue=HexToDec(str);
returnFileAttributeValue;
privatestaticintHexToDec(Stringcadhex)
intn,i,j,k,decimal;
StringCADHEX1;
n=0;
i=0;
k=0;
decimal=0;
CADHEX1=null;
n=cadhex.length();
CADHEX1=cadhex.trim().toUpperCase();
while(i<
n)
j=CADHEX1.charAt(i);
if((j>
=48)&
(j<
65))
j=j-48;
if(j>
=65)
j=j-55;
i=i+1;
//16幂运算
k=1;
for(intm=0;
m<
(n-i);
m++)
k=16*k;
decimal=j*k+decimal;
returndecimal;
privatestaticStringgetPicColor(intcolor)
intk;
k=1;
//2幂运算
for(intm=0;
color;
k=2*k;
Integerkk;
kk=null;
if(k>
=1048576)
k=k/1048576;
kk=newInteger(k);
piccolor=kk.toString()+"
M"
elseif(k>
k=k/1024;
piccolor=kk.toString();
returnpiccolor;
四、后记
以上源代码在Win2k和Jbuilder7等环境下正常运行过。
由于时间关系,该程序目前只支持GIF(有87A/89A两种格式)、JPG、PNG和BMP格式。
另外,对于PNG图片因缺少相关资源文件未作色彩分析。