package com.javaxyq.util;
import java.awt.Component;
import java.awt.Font;
import java.awt.Image;
import java.awt.image.RenderedImage;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.Enumeration;
import java.util.Iterator;
import java.util.Properties;
import javax.imageio.IIOImage;
import javax.imageio.ImageIO;
import javax.imageio.ImageWriter;
import javax.imageio.stream.ImageOutputStream;
import javax.swing.Icon;
import javax.swing.ImageIcon;
import javax.swing.JFileChooser;
import javax.swing.UIManager;
import javax.swing.filechooser.FileFilter;
import javax.swing.plaf.FontUIResource;
import com.javaxyq.tools.OpenDialog;
public class Utils {
public static final ExampleFileFilter WTC_FILTER = new ExampleFileFilter("wtc",
"WasTools Canvas �ļ�");
public static final ExampleFileFilter GIF_FILTER = new ExampleFileFilter("gif", "GIF �ļ�");
public static final ExampleFileFilter BMP_FILTER = new ExampleFileFilter("bmp", "BMP �ļ�");
public static final ExampleFileFilter IMAGE_FILTER = new ExampleFileFilter(new String[] {
"jpg", "png", "gif" }, "All Images");
public static final ExampleFileFilter SUPPORT_FILTER = new ExampleFileFilter(new String[] {
"wtc", "was", "wdf", "wd1", "wd2", "wd3", "wd4", "jpg", "png", "gif" },
"All Support Files");
public static final ExampleFileFilter PNG_FILTER = new ExampleFileFilter("png", "PNG �ļ�");
public static final ExampleFileFilter WAS_FILTER = new ExampleFileFilter("was", "WAS �ļ�");
public static final ExampleFileFilter WDF_FILTER = new ExampleFileFilter(new String[] { "wdf",
"wd1", "wd2", "wd3", "wd4" }, "WDF �ļ�");
public static final FileFilter JPEG_FILTER = new ExampleFileFilter(
new String[] { "jpg", "jpeg" }, "JPEG �ļ�");
public static final FileFilter MAP_FILTER = new ExampleFileFilter("map", "��ͼ�ļ�");
public static FileFilter iniFilter = new ExampleFileFilter("ini", "INI �ļ�");
public static final String PROPERTY_LAST_OPEN_DIR = "LastOpenDir";
public static final String PROPERTY_LAST_SAVE_DIR = "LastSaveDir";
public static final int FILE_TYPE_WAS = 1;
public static final int FILE_TYPE_WDF = 2;
public static final int FILE_TYPE_JPG = 3;
public static final int FILE_TYPE_PNG = 4;
public static final int FILE_TYPE_GIF = 5;
public static final int FILE_TYPE_INI = 6;
public static final int FILE_TYPE_BMP = 7;
public static final int FILE_TYPE_WTC = 100;
public static final int FILE_TYPE_UNKNOW = 0xFF;
private static File lastOpenDir = new File(".");
private static File lastSaveDir = new File(".");
/**
* ��ʼ��ȫ������
*/
@SuppressWarnings("unchecked")
public static void iniGlobalFont() {
FontUIResource fontRes = new FontUIResource(DEFAULT_FONT);
for (Enumeration keys = UIManager.getDefaults().keys(); keys.hasMoreElements();) {
Object key = keys.nextElement();
Object value = UIManager.get(key);
if (value instanceof FontUIResource)
UIManager.put(key, fontRes);
}
}
public static Font DEFAULT_FONT = new Font("����", Font.PLAIN, 12);
private static OpenDialog openChooser = null;
public static File[] showOpenDialog(Component parent, String title, FileFilter filter) {
if (openChooser == null) {
openChooser = new OpenDialog();
}
if (filter == SUPPORT_FILTER) {
openChooser.addChoosableFileFilter(WTC_FILTER);
openChooser.addChoosableFileFilter(WAS_FILTER);
openChooser.addChoosableFileFilter(WDF_FILTER);
openChooser.addChoosableFileFilter(JPEG_FILTER);
openChooser.addChoosableFileFilter(PNG_FILTER);
openChooser.addChoosableFileFilter(GIF_FILTER);
openChooser.addChoosableFileFilter(BMP_FILTER);
}
int returnVal = openChooser.showDialog(parent, lastOpenDir, title, filter);
if (returnVal == JFileChooser.APPROVE_OPTION) {
lastOpenDir = openChooser.getCurrentDirectory();
return openChooser.getSelectedFiles();
}
return new File[] {};
}
public static Image loadImage(String filename) {
return new ImageIcon(filename).getImage();
}
public static File showSaveDialog(Component parent, String title, FileFilter filter) {
return showSaveDialog(parent, title, filter, null);
}
public static byte[] loadJarFile(String filename) throws IOException {
byte[] buf;
InputStream is = Utils.class.getResourceAsStream(filename);
if (is == null) {
if (filename.startsWith("/")) {
filename = filename.substring(1);
}
is = new FileInputStream(filename);
}
buf = new byte[is.available()];
int a = 0, count = 0;
while (is.available() > 0) {
a = is.read(buf, count, is.available());
count += a;
}
return buf;
}
/**
* ���ָ����ͼ��д����
*
* @param format
* @return
*/
public static ImageWriter getImageWriter(String format) {
ImageWriter imgWriter = null;
Iterator<ImageWriter> iter = ImageIO.getImageWritersByFormatName(format);
if (iter.hasNext()) {
imgWriter = (ImageWriter) iter.next();
}
return imgWriter;
}
/**
* ����ָ����ʽ���ͼ���ļ�
*
* @param img
* @param outputFile
* @param format
* @return
*/
public static boolean writeImage(RenderedImage img, File outputFile, String format) {
ImageWriter imgWriter = getImageWriter(format);
if (imgWriter != null) {
try {
ImageOutputStream imgOut;
imgOut = ImageIO.createImageOutputStream(outputFile);
imgWriter.setOutput(imgOut);
IIOImage iioImage = new IIOImage(img, null, null);
imgWriter.write(iioImage);
//ImageIO.write(img, format, outputFile);
imgOut.close();
return true;
} catch (IOException e) {
e.printStackTrace();
}
}
return false;
}
private static Properties properties;
public static void loadSettings(String filename) {
properties = new Properties();
try {
FileInputStream fis = new FileInputStream(filename);
properties.load(fis);
fis.close();
lastOpenDir = new File(properties.getProperty(PROPERTY_LAST_OPEN_DIR, "."));
lastSaveDir = new File(properties.getProperty(PROPERTY_LAST_SAVE_DIR, "."));
} catch (Exception e) {
}
}
public static String getProperty(String key) {
return properties.getProperty(key);
}
public static void setProperty(String key, String value) {
properties.setProperty(key, value);
}
public static boolean saveSettings(String comments, String filename) {
try {
properties.setProperty(PROPERTY_LAST_OPEN_DIR, lastOpenDir.getAbsolutePath());
properties.setProperty(PROPERTY_LAST_SAVE_DIR, lastSaveDir.getAbsolutePath());
OutputStream fos = new FileOutputStream(filename);
properties.store(fos, comments);
fos.close();
return true;
} catch (Exception e) {
e.printStackTrace();
return false;
}
}
public static Icon loadIcon(String filename) {
Icon icon = new ImageIcon(Utils.class.getResource(filename));
return icon;
}
/**
* idenfity file type by suffix: "was","wdf","jpg","png","gif"
*
* @param file
* @return
*/
public static int getFileType(File file) {
return getFileType(file.getName());
}
/**
* idenfity file type by suffix: "was","wdf","jpg","png","gif"
*
* @param filename
* @return
*/
public static int getFileType(String filename) {
filename = filename.toLowerCase();
int type = FILE_TYPE_UNKNOW;
if (filename.endsWith(".was") || filename.endsWith(".WAS")) {
type = FILE_TYPE_WAS;
} else if (filename.endsWith(".wdf") || filename.endsWith(".WDF")) {
type = FILE_TYPE_WDF;
} else if (filename.endsWith(".wd1") || filename.endsWith(".WD1")) {
type = FILE_TYPE_WDF;
} else if (filename.endsWith(".wd2") || filename.endsWith(".WD2")) {
type = FILE_TYPE_WDF;
} else if (filename.endsWith(".wd3") || filename.endsWith(".WD3")) {
type = FILE_TYPE_WDF;
} else if (filename.endsWith(".wd4") || filename.endsWith(".WD4")) {
type = FILE_TYPE_WDF;
} else if (filename.endsWith(".jpg") || filename.endsWith(".JPG")) {
type = FILE_TYPE_JPG;
} else if (filename.endsWith(".jpeg") || filename.endsWith(".JPEG")) {
type = FILE_TYPE_JPG;
} else if (filename.endsWith(".png") || filename.endsWith(".PNG")) {
type = FILE_TYPE_PNG;
} else if (filename.endsWith(".bmp") || filename.endsWith(".BMP")) {
type = FILE_TYPE_BMP;
} else if (filename.endsWith(".gif") || filename.endsWith(".GIF")) {
type = FILE_TYPE_GIF;
} else if (filename.endsWith(".wtc") || filename.endsWith(".WTC")) {
type = FILE_TYPE_WTC;
} else if (filename.endsWith(".ini") || filename.endsWith(".INI")) {
type = FILE_TYPE_INI;
}
return type;
}
public static Image loadImage(File file) {
return loadImage(file.getAbsolutePath());
}
public static boolean getPropertyAsBoolean(String key) {
return Boolean.parseBoolean(getProperty(key));
}
public static int getPropertyAsInt(String key) {
try {
return Integer.parseInt(getProperty(key));
} catch (Exception e) {
}
return 0;
}
public static File showSaveDialog(Component parent, String title, FileFilter filter, String name) {
File file = null;
JFileChooser chooser = new JFileChooser();
if (name != null)
chooser.setSelectedFile(new File(lastSaveDir, name));
chooser.setCurrentDirectory(lastSaveDir);
chooser.setFileFilter(filter);
chooser.setDialogTitle(title);
int returnVal = chooser.showSaveDialog(parent);
if (returnVal == JFileChooser.APPROVE_OPTION) {
file = chooser.getSelectedFile();
lastSaveDir = chooser.getCurrentDirectory();
}
return file;
}
/**
* ��ȡ�ļ�����<br>
* ����˳��1.���ұ����ļ���Դ 2.Jar�ļ��е���Դ
*
* @param filename
* @return
* @throws FileNotFoundException
*/
public static InputStream getResourceAsStream(String filename) {
InputStream in = null;
if (new File(filename).exists()) {
try {
in = new FileInputStream(filename);
} catch (FileNotFoundException e) {
e.printStackTrace();
}
} else {
if (!filename.startsWith("/")) {
filename = "/" + filename;
}
in = Utils.class.getResourceAsStream(filename);
}
if (in == null) {
System.err.println("load resource failed: " + filename);
}
return in;
}
}