用java的图形用户界面实现文件浏览功能(需要导包)
import org.eclipse.swt.SWT;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.FileDialog;
import org.eclipse.swt.widgets.MessageBox;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Text;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.widgets.Group;
import org.eclipse.wb.swt.SWTResourceManager;
public class TestShell {
protected Shell shell;
private Text text_file;
public static void main(String[] args) {
try {
TestShell window = new TestShell();
window.open();
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* Open the window.
*/
public void open() {
Display display = Display.getDefault();
createContents();
shell.open();
shell.layout();
while (!shell.isDisposed()) {
if (!display.readAndDispatch()) {
display.sleep();
}
}
}
/**
* Create contents of the window.
*/
protected void createContents() {
shell = new Shell();
shell.setSize(500, 200);
shell.setText("解析WSDL");
text_file = new Text(shell, SWT.BORDER);
text_file.setBounds(80, 33, 290, 24);
//实现文件浏览功能
Button browseButton = new Button(shell,SWT.PUSH);
browseButton.setText("浏览...");
browseButton.setFont(SWTResourceManager.getFont("Tahoma", 12, SWT.NORMAL));
browseButton.setBounds(383, 33, 80, 24);
browseButton.addSelectionListener(new SelectionAdapter(){
/* (non-Javadoc)
* @see org.eclipse.swt.events.SelectionAdapter#widgetSelected(org.eclipse.swt.events.SelectionEvent)
*/
public void widgetSelected(SelectionEvent e){
FileDialog dialog = new FileDialog (shell, SWT.OPEN);
dialog.setText("Source Folder Selection");
dialog.setFilterExtensions(new String[] {"*.txt","*.jpg","*.*"});
String filePath = dialog.open();
if(dialog!=null){
text_file.setText(filePath);
}
}
});
Button button_exe = new Button(shell, SWT.NONE);
button_exe.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
MessageBox msgbox = new MessageBox(shell,
SWT.ICON_QUESTION | SWT.OK);
msgbox.setText("提示");
String file = "";
file = text_file.getText();
if(file.equals("") || file == null){
msgbox.setMessage("WSDL文件不能为空");
msgbox.open();
return;
}else{
msgbox.setMessage("文件获取到了!!!");
System.out.println(file);
msgbox.open();
}
}
});
button_exe.setFont(SWTResourceManager.getFont("Tahoma", 12, SWT.NORMAL));
button_exe.setBounds(214, 133, 87, 23);
button_exe.setText("\u6267\u884C");
Group group = new Group(shell, SWT.NONE);
group.setBounds(10, 10, 472, 117);
Label label = new Label(group, SWT.NONE);
label.setBounds(10, 23, 105, 24);
label.setFont(SWTResourceManager.getFont("Tahoma", 12, SWT.NORMAL));
label.setText("源文件:");
}
}
Spring中的JDBCTemplate使用
数据库准备:
创建数据库
创建表:
Java代码:
1、创建web 工程 springJdbcTemplate
2、添加Spring能力 在此需要将jdbc包也同时加入
3、配置上mysql的连接驱动(拷贝mysql驱动包,如果不拷贝报错很诡异)
在applicationContext.xml中进行配置
在beans标签中填写
<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
<property name="dataSource">
<ref local="dataSource" />
</property>
</bean>
<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName">
<value>com.mysql.jdbc.Driver</value>
</property>
<property name="url">
<value>jdbc:mysql://localhost:3306/myspringjdbcdb</value>
</property>
<property name="username">
<value>root</value>
</property>
<property name="password">
<value>root</value>
</property>
</bean>
4、创建包结构并且写出类(每个类中可以没内容)
5、每个类中的源代码
UserDao.java
UserDaoImp.java
此项写完填写在applicationContext.xml中进行配置
在beans标签中填写
User.java
每个成员变量都写上get和set方法
并且在此类中还要加入
此项写完填写在applicationContext.xml中进行配置
在beans标签中填写
测试类TestAction.java
打印出结果:
Remote Object Service
对于主流的Flex数据服务器,目前都支持AMF3/RemoteObject,今天我们就来谈一谈BlazeDS的远程服务。
1. 编写远程服务类
编写BlazeDS的Java远程服务类有三个要求:
1) 所有被调用的方法必须是public;
2) 所有的编译类必须能够通过BlazeDS的classpath访问得到;
3) 类必须是stateful/stateless的。
大家可以参考工程文件中的SimpleService.java。
2. 配置remoting-config.xml
Java服务类写好后,还需要配置,BlazeDS的Remote Service也是在服务器端对应了一个配置文件:remoting-config.xml,配置好Remote Service 后,Flex在运行时才能找到相应的服务类并调用其方法。下面就是本工程的Remote Service配置文件。
第2~3行指定服务的ID和对应的类,第5~7行设置适配器(adapters)的ID和对应的类。第9~11行指定默认的通道(channels)及其参照,该通道是在 services-config.xml中定义的。适配器和通道可以设置多个,采用第一个优先的原则。前面这几项设置适用于proxy-config.xml、remoting-config.xml和我们后面要讲的 messaging-config.xml。
第13~18行设置的服务终端(destination),该属性必须和RemoteObject组件的服务终端属性一致。按照服务的种类,服务终端又可以分为代理服务终端、远程服务终端和消息服务终端。上一次讲述的代理服务终端,需要指定该终端的url,而这次我们讲述的远程服务终端,需要指定该目标的source和scope。source对应 RemoteObject要调用的远程服务的全限定类名,不像FluorineFX,它不能在RemoteObject组件中指定。scope表示当前远程服务的作用范围,即远程服务类是stateful还是stateless,有application、session和request三个选项。
注意:我们提倡在配置文件中设置,这样更安全也方便后期维护。
3. 使用RemoteObjec组件
对于RemoteObjec组件,请参看
下面的Flex RemoteObject类参考相关内容。一句话,Flex的RemoteObject与后台语言是无关的。在工程文件中的BasicRemoteObject.mxml,调用了SimpleService类的三个方法,当通过BlazeDS从J2EE服务器返回RemoteObjec时,Java数据被序列化成ActionScript数据。其中Java字符串对应ActionScript字符串,Java的数组列表对应ActionScript ArrayCollection。
Flex RemoteObject类参考
<mx:RemoteObject>标记允许使用AMF3访问远程服务类的方法,要知道在Flex中怎样使用Flash Remoting访问数据,应该先了解一下RemoteObject类。
要知道在Flex中怎样使用Flash Remoting访问数据,应该先了解一下RemoteObject类。
包 mx.rpc.remoting 类 public dynamic class RemoteObject
继承 RemoteObject → AbstractService → Proxy → Object
子类 RemoteObject
一、<mx:RemoteObject>标记
它允许使用AMF3访问远程服务类的方法。
1. <mx:RemoteObject>允许的标记属性有:
1
2
3
4
5
6
7
8
9
10
11
12
13 |
< mx:RemoteObject
Properties
concurrency = "multiple|single|last"
destination = "No default."
id = "No default."
endpoint = "No default."
showBusyCursor = "false|true"
source = "No default." (currently, Macromedia ColdFusion only)
makeObjectsBindable = "false|true"
事件
fault = "No default."
result = "No default."
/>
|
2. <mx:RemoteObject>标记可以包含多个 <mx:method> 标记,<mx:method>允许的标记属性有:
1
2
3
4
5
6
7
8
9 |
< mx:method
Properties
concurrency = "multiple|single|last"
name = "No default, required."
makeObjectsBindable = "false|true"
事件
fault = "No default."
result = "No default."
/>
|
3. <mx:RemoteObject>标记可以也只能包含一个<mx:arguments> 子标记,该子标记是一个序列数组对象。
二、公有属性
1. concurrency : String
表示对同一服务怎样进行多次调用。类似于XMLConnector/WebServiceConnector/RemotingConnector的multipleSimultaneousAllowed属性。它的默认值为multiple,允许下列值:
- Multiple:同一时间可以执行多个请求。已有的请求不会被取消;
- Single:同一时间调用只能执行一个请求,多个请求会报错;
- Last:最后一次请求会覆盖已有的请求。
2. endpoint: String
允许开发人员快速为RemoteObject destination(目标)指定endpoint(端点)。而该destination既没有在编译时,也没有在用代码新建ChannelSet(通道集)时参照services-config.xml。如果设定了该属性,它会覆盖已有的ChannelSet。
如果endpoint 的url 以“https”开关,将使用 SecureAMFChannel, 否则使用普通的AMFChannel。{server.name}和{server.port}标记,可以用在endpoint的url中,表明Channel应该使用用来加载SWF文件的服务名称和端口。
3. showBusyCursor:Boolean
表示服务正在执行时是否显示一个表示忙碌的鼠标指针。
三、公有方法
1. RemoteObject () 构造方法
创建一个新的RemoteObject对象。
参数
destination:String (默认为 null) —RemoteObject 的destination属性必须匹配 services-config.xml 中的destination的ID属性值。
2. initialized ()
public function initialized(document:Object, id:String):void
只要设定RemoteObject标记就会通过MXML编译器自动调用该方法。如果使用ActionScrip新建RemoteObject实例,则可以自行调用该方法,这对验证其参数很有用。
参数
- document:Object —RemoteObject 所在的MXML文档
- id:String —RemoteObjec在上述文档中的ID
在Flex中使用ActionScript,其实和在网页中使用Javascript等脚本文件类似,主要有三种方式。
Flex的核心是MXML和ActionScript。MXML是用于为Flex应用程序进行用户界面组件布局,它属于表示层,最终要编辑成ActionScript 并生成ActionScript 类文件在Flash Player上运行。如果你是个Java开发者就很好理解这一点,MXML 就好比是JSP/Struts/JSF,它们最终都会编辑成Java类文件并在具备Java虚拟机环境的浏览器上运行。所以说,Flex 最核心的还是ActionScript 。在Flex中,ActionScript是 类库的方式出现的,该类库包含组件 (容器和控件)、管理器类、数据服务类和所有其他功能的类。本文将谈一谈在Flex中使用ActionScript的方法。
其实和在网页中使用Javascript等脚本文件类似,主要有三种方式。
1. 内联方式
这种方式直接将AS方法作为事件的属性值,当然这种方法一般只有一行,相对简单。如果要给方法传递对数,这种方法就不可取了。
1
2
3
4
5
6
7
8
9
10
11
12
13 |
<? xml version = "1.0" encoding = "utf-8" ?>
< mx:Application xmlns:mx = "http://www.adobe.com/2006/mxml" layout = "vertical" >
< mx:Button label = "Say Hello" click = "sayHello('Flying')" />
< mx:Script >
<![CDATA[
import mx.controls.Alert;
private function sayHello(param_name:String):void {
Alert.show("Hello, "+param_name);
}
]]>
</ mx:Script >
</ mx:Application >
|
2. 级联方式
这种方式将AS方法放入<mx:Script></mx:Script>代码块中,然后将方法作为事件的属性值,并可以在调用方法时传递参数,从而做到了AS方法在一个文件中的重用。
1
2
3
4
5
6 |
<? xml version = "1.0" encoding = "utf-8" ?>
< mx:Application xmlns:mx = "http://www.adobe.com/2006/mxml" layout = "vertical" >
< mx:Script source = "myFunction.as" />
< mx:Button label = "Say Hello" click = "sayHello('Flying');" />
</ mx:Application >
|
3. 外联方式
1
2
3
4
5 |
mx.controls.Alert;
private function sayHello(param_name: String ): void {
mx.controls.Alert.show( "Hello, " +param_name);
}
|
上述方式为AS方法单独新建一个as文件,然后设置该方法为被调用文件的Script元素的source属性值,并可以在调用方法时传递参数,此文件可以在多个文件调用,从而实现了AS方法在多个文件中的重用。
Flex跳转到JSP或者其他非Flex页面
Html代码
var url:String="http://"+URLUtil.getServerNameWithPort(Application.application.url)+"/DZDJ/index.jsp?id=" + 1;
ExternalInterface.call('window.open',url,'_top');
_top是可变的,_top表示在当前页面打开,关闭远页面。
导入类:
import flash.net.URLRequest;
import flash.net.navigateToURL;
关闭当前浏览器:
var url:URLRequest = new URLRequest("javascript:window.close()");
navigateToURL(url,"_top");
(注意:要在服务器上测试,否则会报安全沙箱冲突);
在浏览器上跳转页面
navigateToURL(new URLRequest("http://www.baidu.com"),"_top");
打开一个新的浏览器:
var request:URLRequest = new URLRequest("http://www.baidu.com/);
navigateToURL(request);
Flex跳转到Flex
FLEX和JSP不一样,没有所谓的这个页面跳转到另外的一个页面。一般都是用ViewStack进行页面切换,其他模块就需要loadmoudle进行函数设置了。
<mx:ViewStack x="0" y="0" id="viewstack1" width="619" height="700">
<mx:Canvas id="View1" width="100%" height="100%">
<mx:Button label="View2 " click="viewstack1.selectedChild=View2"/>
</mx:Canvas>
<mx:Canvas id="View2" width="100%" height="100%" color="#3FCFE9">
</mx:Canvas>
</mx:ViewStack>
import java.io.BufferedInputStream;
import java.io.IOException;
import java.io.RandomAccessFile;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLConnection;
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
public class FileDownLoadTest {
private static final int TCOUNT = 10;
private CountDownLatch latch = new CountDownLatch(TCOUNT);
private long completeLength = 0;
private long fileLength;
/**
* @param args
* @throws Exception
*/
public static void main(String[] args) throws Exception {
new FileDownLoadTest().download("http://localhost:8080/test/IESSAction.docx");
}
public void download(String address) throws Exception{
ExecutorService service = Executors.newFixedThreadPool(TCOUNT);
URL url = new URL(address);
URLConnection cn = url.openConnection();
cn.setRequestProperty("Referer", "http://www.test.com");
fileLength = cn.getContentLength();
long packageLength = fileLength/TCOUNT;
long leftLength = fileLength%TCOUNT;
RandomAccessFile file = new RandomAccessFile("d:\\test.docx","rw");
//计算每个线程请求文件的开始和结束位置
long pos = 0;
long endPos = pos + packageLength;
for(int i=0; i<TCOUNT; i++){
if(leftLength >0){
endPos ++;
leftLength--;
}
service.execute(new DownLoadThread(url, file, pos, endPos));
pos = endPos;
endPos = pos + packageLength;
}
System.out.println("waiting........................................");
long begin = System.currentTimeMillis();
latch.await();
file.close();
System.out.println("end........................................");
System.out.println(System.currentTimeMillis() - begin + "ms");
service.shutdown();
}
class DownLoadThread implements Runnable{
private URL url;
private RandomAccessFile file;
private long from;
private long end;
DownLoadThread(URL url, RandomAccessFile file, long from, long end){
this.url = url;
this.file = file;
this.from = from;
this.end = end;
}
public void run() {
long pos = from;
byte[] buf = new byte[512];
try {
HttpURLConnection cn = (HttpURLConnection) url.openConnection();
cn.setRequestProperty("Range", "bytes=" + from + "-" + end);
if(cn.getResponseCode() != 200 && cn.getResponseCode()!=206){
run();
return;
}
BufferedInputStream bis = new BufferedInputStream(cn.getInputStream());
int len ;
while((len = bis.read(buf)) != -1){
// synchronized(file){
file.seek(pos);
file.write(buf, 0, len);
// }
pos += len;
completeLength +=len;
System.out.println("threadName: " + Thread.currentThread().getName()
+ "persent: " + completeLength * 100 /fileLength + "%");
}
cn.disconnect();
latch.countDown();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
JAVA直接操作excel
/**
* @Author:何云龙
* @Version: 2012-11-16 下午03:45:16
* @Description:
*/
import jxl.*;
import java.io.*;
import jxl.write.*;
/**
* <p>
* java读取Excel表格,复制、更新Excel工作薄
* </p>
*/
public class Test {
public static void main(String[] args) {
jxl.Workbook rwb = null;
try {
// 构建Workbook对象 只读Workbook对象
// 直接从本地文件创建Workbook
// 从输入流创建Workbook
InputStream is = new FileInputStream("D://Book1.xls");
rwb = Workbook.getWorkbook(is);
// Sheet(术语:工作表)就是Excel表格左下角的Sheet1,Sheet2,Sheet3但在程序中
// Sheet的下标是从0开始的
// 获取第一张Sheet表
Sheet rs = rwb.getSheet(0);
// 获取Sheet表中所包含的总列数
int rsColumns = rs.getColumns();
// 获取Sheet表中所包含的总行数
int rsRows = rs.getRows();
// 获取指这下单元格的对象引用
for (int i = 0; i < rsRows; i++) {
for (int j = 0; j < rsColumns; j++) {
Cell cell = rs.getCell(j, i);
System.out.print(cell.getContents() + " ");
}
System.out.println();
}
// 利用已经创建的Excel工作薄创建新的可写入的Excel工作薄
jxl.write.WritableWorkbook wwb = Workbook.createWorkbook(new File(
"D://Book2.xls"), rwb);
// 读取第一张工作表
jxl.write.WritableSheet ws = wwb.getSheet(0);
// 获取第一个单元格对象
jxl.write.WritableCell wc = ws.getWritableCell(0, 0);
// 决断单元格的类型,做出相应的转化
if (wc.getType() == CellType.LABEL) {
Label l = (Label) wc;
l.setString("The value has been modified.");
}
// 写入Excel对象
wwb.write();
wwb.close();
} catch (Exception e) {
e.printStackTrace();
} finally {
// 操作完成时,关闭对象,翻译占用的内存空间
rwb.close();
}
}
}
方法1:[第一种方法比后一种生成的缩略图要清晰]
import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.awt.image.ColorModel;
import java.awt.image.WritableRaster;
import java.awt.*;
import java.awt.geom.AffineTransform;
import java.io.InputStream;
import java.io.File;
import java.io.FileOutputStream;
public class Test {
public static BufferedImage resize(BufferedImage source, int targetW, int targetH) {
// targetW,targetH分别表示目标长和宽
int type = source.getType();
BufferedImage target = null;
double sx = (double) targetW / source.getWidth();
double sy = (double) targetH / source.getHeight();
//这里想实现在targetW,targetH范围内实现等比缩放。如果不需要等比缩放
//则将下面的if else语句注释即可
if(sx>sy)
{
sx = sy;
targetW = (int)(sx * source.getWidth());
}else{
sy = sx;
targetH = (int)(sy * source.getHeight());
}
if (type == BufferedImage.TYPE_CUSTOM) { //handmade
ColorModel cm = source.getColorModel();
WritableRaster raster = cm.createCompatibleWritableRaster(targetW, targetH);
boolean alphaPremultiplied = cm.isAlphaPremultiplied();
target = new BufferedImage(cm, raster, alphaPremultiplied, null);
} else
target = new BufferedImage(targetW, targetH, type);
Graphics2D g = target.createGraphics();
//smoother than exlax:
g.setRenderingHint(RenderingHints.KEY_RENDERING, RenderingHints.VALUE_RENDER_QUALITY );
g.drawRenderedImage(source, AffineTransform.getScaleInstance(sx, sy));
g.dispose();
return target;
}
public static void saveImageAsJpg (String fromFileStr,String saveToFileStr,int width,int hight)
throws Exception {
BufferedImage srcImage;
// String ex = fromFileStr.substring(fromFileStr.indexOf("."),fromFileStr.length());
String imgType = "JPEG";
if (fromFileStr.toLowerCase().endsWith(".png")) {
imgType = "PNG";
}
// System.out.println(ex);
File saveFile=new File(saveToFileStr);
File fromFile=new File(fromFileStr);
srcImage = ImageIO.read(fromFile);
if(width > 0 || hight > 0)
{
srcImage = resize(srcImage, width, hight);
}
ImageIO.write(srcImage, imgType, saveFile);
}
public static void main (String argv[]) {
try{
//参数1(from),参数2(to),参数3(宽),参数4(高)
Test.saveImageAsJpg("E:/Document/My Pictures/3.gif","c:/6.gif",50,50);
} catch(Exception e)
{
e.printStackTrace();
}
}
}
方法2:
import java.io.*;
import java.util.*;
import com.sun.image.codec.jpeg.*;
import java.awt.image.*;
import java.awt.*;
import java.net.*;
import java.applet.*;
import java.sql.*;
//缩略图类,
//本java类能将jpg图片文件,进行等比或非等比的大小转换。
//具体使用方法
//s_pic(大图片路径,生成小图片路径,大图片文件名,生成小图片文名,生成小图片宽度,生成小图片高度,是否等比缩放(默认为true))
public class Tes {
String InputDir; //输入图路径
String OutputDir; //输出图路径
String InputFileName; //输入图文件名
String OutputFileName; //输出图文件名
int OutputWidth = 80; //默认输出图片宽
int OutputHeight = 80; //默认输出图片高
int rate = 0;
boolean proportion = true; //是否等比缩放标记(默认为等比缩放)
public Tes() {
//初始化变量
InputDir = "";
OutputDir = "";
InputFileName = "";
OutputFileName = "";
OutputWidth = 80;
OutputHeight = 80;
rate = 0;
}
public void setInputDir(String InputDir) {
this.InputDir = InputDir;
}
public void setOutputDir(String OutputDir) {
this.OutputDir = OutputDir;
}
public void setInputFileName(String InputFileName) {
this.InputFileName = InputFileName;
}
public void setOutputFileName(String OutputFileName) {
this.OutputFileName = OutputFileName;
}
public void setOutputWidth(int OutputWidth) {
this.OutputWidth = OutputWidth;
}
public void setOutputHeight(int OutputHeight) {
this.OutputHeight = OutputHeight;
}
public void setW_H(int width, int height) {
this.OutputWidth = width;
this.OutputHeight = height;
}
public String s_pic() {
BufferedImage image;
String NewFileName;
//建立输出文件对象
File file = new File(OutputDir + OutputFileName);
FileOutputStream tempout = null;
try {
tempout = new FileOutputStream(file);
} catch (Exception ex) {
System.out.println(ex.toString());
}
Image img = null;
Toolkit tk = Toolkit.getDefaultToolkit();
Applet app = new Applet();
MediaTracker mt = new MediaTracker(app);
try {
img = tk.getImage(InputDir + InputFileName);
mt.addImage(img, 0);
mt.waitForID(0);
} catch (Exception e) {
e.printStackTrace();
}
if (img.getWidth(null) == -1) {
System.out.println(" can't read,retry!" + "<BR>");
return "no";
} else {
int new_w;
int new_h;
if (this.proportion == true) { //判断是否是等比缩放.
//为等比缩放计算输出的图片宽度及高度
double rate1 = ((double) img.getWidth(null)) /
(double) OutputWidth + 0.1;
double rate2 = ((double) img.getHeight(null)) /
(double) OutputHeight + 0.1;
double rate = rate1 > rate2 ? rate1 : rate2;
new_w = (int) (((double) img.getWidth(null)) / rate);
new_h = (int) (((double) img.getHeight(null)) / rate);
} else {
new_w = OutputWidth; //输出的图片宽度
new_h = OutputHeight; //输出的图片高度
}
BufferedImage buffImg = new BufferedImage(new_w, new_h,
BufferedImage.TYPE_INT_RGB);
Graphics g = buffImg.createGraphics();
g.setColor(Color.white);
g.fillRect(0, 0, new_w, new_h);
g.drawImage(img, 0, 0, new_w, new_h, null);
g.dispose();
JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(tempout);
try {
encoder.encode(buffImg);
tempout.close();
} catch (IOException ex) {
System.out.println(ex.toString());
}
}
return "ok";
}
public String s_pic(String InputDir, String OutputDir, String InputFileName,
String OutputFileName) {
//输入图路径
this.InputDir = InputDir;
//输出图路径
this.OutputDir = OutputDir;
//输入图文件名
this.InputFileName = InputFileName;
//输出图文件名
this.OutputFileName = OutputFileName;
return s_pic();
}
public String s_pic(String InputDir, String OutputDir, String InputFileName,
String OutputFileName, int width, int height,
boolean gp) {
//输入图路径
this.InputDir = InputDir;
//输出图路径
this.OutputDir = OutputDir;
//输入图文件名
this.InputFileName = InputFileName;
//输出图文件名
this.OutputFileName = OutputFileName;
//设置图片长宽
setW_H(width, height);
//是否是等比缩放 标记
this.proportion = gp;
return s_pic();
}
public static void main(String[] a) {
//s_pic(大图片路径,生成小图片路径,大图片文件名,生成小图片文名,生成小图片宽度,生成小图片高度)
Tes mypic = new Tes();
System.out.println(
mypic.s_pic("E://Document//My Pictures//",
"E://Document//My Pictures//",
"topbg-3.gif", "3.gif", 400, 400, true)
);
}
}
3.jsp方式
java.io.*,java.awt.Image,java.awt.image.*,com.sun.image.codec.jpeg.*,
try
{
java.io.File file = new java.io.File("E://Document//My Pictures//3.gif");
String newurl="E://Document//My Pictures//32.gif"; //新的缩略图保存地址
Image src = javax.imageio.ImageIO.read(file); //构造Image对象
float tagsize=200;
int old_w=src.getWidth(null); //得到源图宽
int old_h=src.getHeight(null);
int new_w=0;
int new_h=0; //得到源图长
int tempsize;
float tempdouble;
if(old_w>old_h){
tempdouble=old_w/tagsize;
}else{
tempdouble=old_h/tagsize;
}
new_w=Math.round(old_w/tempdouble);
new_h=Math.round(old_h/tempdouble);//计算新图长宽
BufferedImage tag = new BufferedImage(new_w,new_h,BufferedImage.TYPE_INT_RGB);
tag.getGraphics().drawImage(src,0,0,new_w,new_h,null); //绘制缩小后的图
FileOutputStream newimage=new FileOutputStream(newurl); //输出到文件流
JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(newimage);
encoder.encode(tag); //近JPEG编码
newimage.close();
}catch (Exception e){
e.toString();
}