日志分类:Java

Eclipse最全快捷键

时间:2011年08月21日作者:么吉查看次数:73 views评论次数:0

常用快捷键:
Ctrl+1 快速修复
Ctrl+D: 删除当前行
Ctrl+Alt+↓ 复制当前行到下一行(复制增加)
Ctrl+Alt+↑ 复制当前行到上一行(复制增加)
Alt+↓ 当前行和下面一行交互位置(特别实用,可以省去先剪切,再粘贴了)
Alt+↑ 当前行和上面一行交互位置(同上)
Alt+← 前一个编辑的页面
Alt+→ 下一个编辑的页面(当然是针对上面那条来说了)
Alt+Enter 显示当前选择资源(工程,or 文件 or文件)的属性
Shift+Enter 在当前行的下一行插入空行(这时鼠标可以在当前行的任一位置,不一定是最后)
Shift+Ctrl+Enter 在当前行插入空行(原理同上条)
Ctrl+Q 定位到最后编辑的地方
Ctrl+L 定位在某行 (对于程序超过100的人就有福音了)
Ctrl+M 最大化当前的Edit或View (再按则反之)
Ctrl+/ 注释当前行,再按则取消注释
Ctrl+O 快速显示 OutLine
Ctrl+T 快速显示当前类的继承结构
Ctrl+W 关闭当前Editer
Ctrl+K 参照选中的Word快速定位到下一个
Ctrl+E 快速显示当前Editer的下拉列表(如果当前页面没有显示的用黑体表示)
Ctrl+/(小键盘) 折叠当前类中的所有代码
Ctrl+×(小键盘) 展开当前类中的所有代码
Ctrl+Space 代码助手完成一些代码的插入(但一般和输入法有冲突,可以修改输入法的热键,也可以暂用Alt+/来代替)
Ctrl+Shift+E 显示管理当前打开的所有的View的管理器(可以选择关闭,激活等操作)
Ctrl+J 正向增量查找(按下Ctrl+J后,你所输入的每个字母编辑器都提供快速匹配定位到某个单词,如果没有,则在stutes line中显示没有找到了,查一个单词时,特别实用,这个功能Idea两年前就有了)
Ctrl+Shift+J 反向增量查找(和上条相同,只不过是从后往前查)
Ctrl+Shift+F4 关闭所有打开的Editer
Ctrl+Shift+X 把当前选中的文本全部变味小写
Ctrl+Shift+Y 把当前选中的文本全部变为小写
Ctrl+Shift+F 格式化当前代码
Ctrl+Shift+P 定位到对于的匹配符(譬如{}) (从前面定位后面时,光标要在匹配符里面,后面到前面,则反之)下面的快捷键是重构里面常用的,本人就自己喜欢且常用的整理一下(注:一般重构的快捷键都是Alt+Shift开头的了)
Alt+Shift+R 重命名 (是我自己最爱用的一个了,尤其是变量和类的Rename,比手工方法能节省很多劳动力)
Alt+Shift+M 抽取方法 (这是重构里面最常用的方法之一了,尤其是对一大堆泥团代码有用)
Alt+Shift+C 修改函数结构(比较实用,有N个函数调用了这个方法,修改一次搞定)
Alt+Shift+L 抽取本地变量( 可以直接把一些魔法数字和字符串抽取成一个变量,尤其是多处调用的时候)
Alt+Shift+F 把Class中的local变量变为field变量 (比较实用的功能)
Alt+Shift+I 合并变量(可能这样说有点不妥Inline)
Alt+Shift+V 移动函数和变量(不怎么常用)
Alt+Shift+Z 重构的后悔药(Undo)

编辑
全局 查找并替换 Ctrl+F
文本编辑器 查找上一个 Ctrl+Shift+K
文本编辑器 查找下一个 Ctrl+K
全局 撤销 Ctrl+Z
全局 复制 Ctrl+C
全局 恢复上一个选择 Alt+Shift+↓
全局 剪切 Ctrl+X
全局 快速修正 Ctrl1+1
全局 内容辅助 Alt+/
全局 全部选中 Ctrl+A
全局 删除 Delete
全局 上下文信息 Alt+?
Alt+Shift+?
Ctrl+Shift+Space
java编辑器 显示工具提示描述 F2
java编辑器 选择封装元素 Alt+Shift+↑
java编辑器 选择上一个元素 Alt+Shift+←
java编辑器 选择下一个元素 Alt+Shift+→
文本编辑器 增量查找 Ctrl+J
文本编辑器 增量逆向查找 Ctrl+Shift+J
全局 粘贴 Ctrl+V
全局 重做 Ctrl+Y

查看
全局 放大 Ctrl+=
全局 缩小 Ctrl+-

窗口
全局 激活编辑器 F12
全局 切换编辑器 Ctrl+Shift+W
全局 上一个编辑器 Ctrl+Shift+F6
全局 上一个视图 Ctrl+Shift+F7
全局 上一个透视图 Ctrl+Shift+F8
全局 下一个编辑器 Ctrl+F6
全局 下一个视图 Ctrl+F7
全局 下一个透视图 Ctrl+F8
文本编辑器 显示标尺上下文菜单 Ctrl+W
全局 显示视图菜单 Ctrl+F10
全局 显示系统菜单 Alt+-

导航
java编辑器 打开结构 Ctrl+F3
全局 打开类型 Ctrl+Shift+T
全局 打开类型层次结构 F4
全局 打开声明 F3
全局 打开外部javadoc Shift+F2
全局 打开资源 Ctrl+Shift+R
全局 后退历史记录 Alt+←
全局 前进历史记录 Alt+→
全局 上一个 Ctrl+,
全局 下一个 Ctrl+.
java编辑器 显示大纲 Ctrl+O
全局 在层次结构中打开类型 Ctrl+Shift+H
全局 转至匹配的括号 Ctrl+Shift+P
全局 转至上一个编辑位置 Ctrl+Q
java编辑器 转至上一个成员 Ctrl+Shift+↑
java编辑器 转至下一个成员 Ctrl+Shift+↓
文本编辑器 转至行 Ctrl+L

搜索
全局 出现在文件中 Ctrl+Shift+U
全局 打开搜索对话框 Ctrl+H
全局 工作区中的声明 Ctrl+G
全局 工作区中的引用 Ctrl+Shift+G

文本编辑
文本编辑器 改写切换 Insert
文本编辑器 上滚行 Ctrl+↑
文本编辑器 下滚行 Ctrl+↓

文件
全局 保存 Ctrl+X
Ctrl+S
全局 打印 Ctrl+P
全局 关闭 Ctrl+F4
全局 全部保存 Ctrl+Shift+S
全局 全部关闭 Ctrl+Shift+F4
全局 属性 Alt+Enter
全局 新建 Ctrl+N

项目
全局 全部构建 Ctrl+B

源代码
java编辑器 格式化 Ctrl+Shift+F
java编辑器 取消注释 Ctrl+\
java编辑器 注释 Ctrl+/
java编辑器 添加导入 Ctrl+Shift+M
java编辑器 组织导入 Ctrl+Shift+O
java编辑器 使用try/catch块来包围 未设置,太常用了,所以在这里列出,建议自己设置。也可以使用Ctrl+1自动修正。

运行
作用域 功能 快捷键
全局 单步返回 F7
全局 单步跳过 F6
全局 单步跳入 F5
全局 单步跳入选择 Ctrl+F5
全局 调试上次启动 F11
全局 继续 F8
全局 使用过滤器单步执行 Shift+F5
全局 添加/去除断点 Ctrl+Shift+B
全局 显示 Ctrl+D
全局 运行上次启动 Ctrl+F11
全局 运行至行 Ctrl+R
全局 执行 Ctrl+U

重构
作用域 功能 快捷键
全局 撤销重构 Alt+Shift+Z
全局 抽取方法 Alt+Shift+M
全局 抽取局部变量 Alt+Shift+L
全局 内联 Alt+Shift+I
全局 移动 Alt+Shift+V
全局 重命名 Alt+Shift+R
全局 重做 Alt+Shift+Y

Java7正式版发布

时间:2011年08月02日作者:么吉查看次数:75 views评论次数:0

  北京时间7月29日上午消息,甲骨文公司今天宣布了Java SE 7的首个正式版,这也是自2006年12月Sun发布Java SE 6以来的首个重要版本更新。
  Java7的版本是Oracle收购Sun后发布的第一个重要的版本.感觉本人安装了一下,一些logo与配色都有一些小变化.

Java 7的下载路径:
http://www.oracle.com/technetwork/java/javase/downloads/java-se-jdk-7-download-432154.html

新特性一览表:
  Swing
  新增 JLayer 类,是一个灵活而且功能强大的Swing组件修饰器,使用方法:How to Decorate Components with JLayer.
  Nimbus Look and Feel 外观从 com.sun.java.swing 包移到 javax.swing 包中,详情:javax.swing.plaf.nimbus.
  更轻松的重量级和轻量级组件的混合。
  支持透明窗体以及非矩形窗体的图形界面,请看 How to Create Translucent and Shaped Windows。
  JColorChooser 类新增 HSV tab.

  网络
  新增 URLClassLoader.close 方法,请看 Closing a URLClassLoader.
  支持 Sockets Direct Protocol (SDP) 提供高性能网络连接,详情请看 Understanding the Sockets Direct Protocol.

  集合
  新增 TransferQueue 接口,是 BlockingQueue 的改进版,实现类为 LinkedTransferQueue.

  RIA/发布
  拖拽的小程序使用一个默认或者定制的标题进行修饰,详情:Requesting and Customizing Applet Decoration in Draggable Applets.
  JNLP 文件做了如下方面的增强,详情请看 JNLP File Syntax:
  The os attribute in the information and resources elements can now contain specific versions of Windows, such as Windows Vista or Windows 7.
  Applications can use the install attribute in the shortcut element to specify their their desire to be installed. Installed applications are not removed when the Java Web Start cache is cleared, but can be explicitly removed using the Java Control Panel.
  Java Web Start applications can be deployed without specifying the codebaseattribute; see Deploying Without Codebase
  可直接在 HTML 中嵌入 JNLP 文件:Embedding JNLP File in Applet Tag.
  可在 JavaScript 代码中检查 Applet 是否已经加载完成:Handling Initialization Status With Event Handlers.
  可在 Applet 从快捷方式启动或者拖出浏览器时对窗口样式和标题进行控制:Requesting and Customizing Applet Decoration in Developing Draggable Applets.

  XML
  包含 Java API for XML Processing (JAXP) 1.4.5, 支持 Java Architecture for XML Binding(JAXB) 2.2.3, 和 Java API for XML Web Services (JAX-WS) 2.2.4.

  java.lang 包
  消除了在多线程环境下的非层次话类加载时导致的潜在死锁,详情:Multithreaded Custom Class Loaders in Java SE 7.

  Java 虚拟机
  支持非 Java 语言: Java SE 7 引入一个新的 JVM 指令用于简化实现动态类型编程语言。
  Garbage-First Collector 是一个服务器端的垃圾收集器用于替换 Concurrent Mark-Sweep Collector (CMS).
  提升了 Java HotSpot 虚拟机的性能。

  Java I/O
  java.nio.file 包以及相关的包 java.nio.file.attribute 提供对文件 I/O 以及访问文件系统的全面支持,请看 File I/O (featuring NIO.2).
  目录 /sample/nio/chatserver/ 包含使用 java.nio.file 包的演示程序。
  目录 /demo/nio/zipfs/ 包含 NIO.2 NFS 文件系统的演示程序。

  安全性
  新的内置对多个基于 ECC 算法(ECDSA/ECDH)的支持,详情请看:Sun PKCS#11 Provider’s Supported Algorithms in Java PKCS#11 Reference Guide.
  禁用了一些弱加密算法,详情请看 Appendix D: Disabling Cryptographic Algorithms in Java PKI Programmer’s Guide and Disabled Cryptographic Algorithms in Java Secure Socket Extension (JSSE) Reference Guide.
  Java 安全套接字扩展中对 SSL/TLS 的增强。

  并发
  fork/join 框架,基于 ForkJoinPool 类,是 Executor 接口的实现,设计它用来进行高效的运行大量任务;使用 work-stealing 技术用来保证大量的 worker 线程工作,特别适合多处理器环境,详情请看 Fork/Join。
  目录/sample/forkjoin/ 包含了 fork/join 框架的演示程序。
  ThreadLocalRandom 类class 消除了使用伪随机码线程的竞争,请看 Concurrent Random Numbers.
  Phaser 类是一个新的同步的屏障,与 CyclicBarrier 类似。

  Java 2D
  一个新的基于 XRender 的 Java 2D 渲染管道支持现在的 X11 桌面,改善了图形性能,请看 System Properties for Java 2D Technology 中的 xrender .
  JDK 可枚举并显示出已安装的 OpenType/CFF 字体,通过GraphicsEnvironment.getAvailableFontFamilyNames 方法 See Selecting a Font.
  TextLayout 类支持西藏语脚本。
  libfontconfig, 是一个字体配置 api ,see Fontconfig.

  国际化
  支持 Unicode 6.0.0
  目录 /demo/jfc/Font2DTest/ 包含 Unicode 6.0 的演示程序。
  Java SE 7 可容纳在 ISO 4217 中新的货币,详情请看 Currency 类。

  Java 编程语言特性
  · 二进制数字表达方式
  · 使用下划线对数字进行分隔表达,例如 1_322_222
  · switch 语句支持字符串变量
  · 泛型实例创建的类型推断
  · 使用可变参数时,提升编译器的警告和错误信息
  · try-with-resources 语句
  · 同时捕获多个异常处理
  · JDBC 4.1
  · 支持使用 try-with-resources 语句进行自动的资源释放,包括连接、语句和结果集
  · 支持 RowSet 1.1

java获取文本文件的编码

时间:2011年07月18日作者:么吉查看次数:147 views评论次数:0

  当读取文件时,我们一般都会指定文本或字符串使用的编码格式,但有时我们不清楚是什么编码的时候,我们需要分析文件或字符是什么编码,我们可以使用以下代码.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
/**
 * 根据文件得到该文件中文本内容的编码
 * 
 * @param file 要分析的文件
 */
public static String getCharset(File file) {
        String charset = "GBK"; // 默认编码
        byte[] first3Bytes = new byte[3];
        try {
            boolean checked = false;
            BufferedInputStream bis = new BufferedInputStream(
                  new FileInputStream(file));
            bis.mark(0);
            int read = bis.read(first3Bytes, 0, 3);
            if (read == -1)
                return charset;
            if (first3Bytes[0] == (byte) 0xFF && first3Bytes[1] == (byte) 0xFE) {
                charset = "UTF-16LE";
                checked = true;
            } else if (first3Bytes[0] == (byte) 0xFE && first3Bytes[1]
                == (byte) 0xFF) {
                charset = "UTF-16BE";
                checked = true;
            } else if (first3Bytes[0] == (byte) 0xEF && first3Bytes[1]
                    == (byte) 0xBB
                    && first3Bytes[2] == (byte) 0xBF) {
                charset = "UTF-8";
                checked = true;
            }
            bis.reset();
            if (!checked) {
                int loc = 0;
                while ((read = bis.read()) != -1) {
                    loc++;
                    if (read >= 0xF0)
                        break;
                    //单独出现BF以下的,也算是GBK
                    if (0x80 <= read && read <= 0xBF)
                        break;
                    if (0xC0 <= read && read <= 0xDF) {
                        read = bis.read();
                        if (0x80 <= read && read <= 0xBF)// 双字节 (0xC0 - 0xDF)
                            // (0x80 -
                            // 0xBF),也可能在GB编码内
                            continue;
                        else
                            break;
                     // 也有可能出错,但是几率较小
                    } else if (0xE0 <= read && read <= 0xEF) {
                        read = bis.read();
                        if (0x80 <= read && read <= 0xBF) {
                            read = bis.read();
                            if (0x80 <= read && read <= 0xBF) {
                                charset = "UTF-8";
                                break;
                            } else
                                break;
                        } else
                            break;
                    }
                }
                System.out.println(loc + " " + Integer.toHexString(read));
            }
            bis.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
        return charset;
}

Android压缩文件(压缩目录)

时间:2011年07月02日作者:ronald查看次数:385 views评论次数:0

  在Android中我们很多时候需要进行压缩与解压缩,就如本人的[ 足球即时比分 ]应用中也用到过.需要将一些信息进行收集再进行压缩,最后将压缩文件上传到服务器中(如何上传将文件上传到服务器中可以看我另一篇博文 :[ Android上传文件到服务器 ]).

  以下我的使用到的工具类的代码.需要注意的是,进行压缩与解压缩都不支持中文名,如果需要支持中文名的话,一般是使用 Ant中的ZipInputStream与ZipOutStream,由于手机上使用ant的jar包的话,会令应用或游戏的大小变大很多,所以尽量小引入其它第三方的jar包的.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
package rbase.app.nowscore.util;
 
import java.io.InputStream;
 
/**
 * Android Zip压缩解压缩
 * @author ronald (www.r-base.net)
 */
public final class ZipUtil {
  private ZipUtil(){
  }
 
  /**
   * 取得压缩包中的 文件列表(文件夹,文件自选)
   * @param zipFileString		压缩包名字
   * @param bContainFolder	是否包括 文件夹
   * @param bContainFile		是否包括 文件
   * @return
   * @throws Exception
   */
  public static java.util.List<java.io.File> getFileList(String zipFileString, boolean bContainFolder, 
          boolean bContainFile)throws Exception {
    java.util.List<java.io.File> fileList = new java.util.ArrayList<java.io.File>();
    java.util.zip.ZipInputStream inZip = 
                     new java.util.zip.ZipInputStream(new java.io.FileInputStream(zipFileString));
    java.util.zip.ZipEntry zipEntry;
    String szName = "";		
    while ((zipEntry = inZip.getNextEntry()) != null) {
	szName = zipEntry.getName();
	if (zipEntry.isDirectory()) {
	  // get the folder name of the widget
	  szName = szName.substring(0, szName.length() - 1);
	  java.io.File folder = new java.io.File(szName);
	  if (bContainFolder) {
	    fileList.add(folder);
	  }
        } else {
	  java.io.File file = new java.io.File(szName);
	  if (bContainFile) {
	    fileList.add(file);
	  }
	}
    }//end of while		
    inZip.close();
    return fileList;
  }
 
  /**
   * 返回压缩包中的文件InputStream
   * 
   * @param zipFilePath		压缩文件的名字
   * @param fileString	解压文件的名字
   * @return InputStream
   * @throws Exception
   */
public static java.io.InputStream upZip(String zipFilePath, String fileString)throws Exception {
	java.util.zip.ZipFile zipFile = new java.util.zip.ZipFile(zipFilePath);
	java.util.zip.ZipEntry zipEntry = zipFile.getEntry(fileString);
 
	return zipFile.getInputStream(zipEntry);
}
 
/**
 * 解压一个压缩文档 到指定位置
 * @param zipFileString	压缩包的名字
 * @param outPathString	指定的路径
 * @throws Exception
 */
public static void unZipFolder(InputStream input, String outPathString)throws Exception {
	java.util.zip.ZipInputStream inZip = new java.util.zip.ZipInputStream(input);
	java.util.zip.ZipEntry zipEntry = null;
	String szName = "";
 
	while ((zipEntry = inZip.getNextEntry()) != null) {
		szName = zipEntry.getName();
 
		if (zipEntry.isDirectory()) {
		  // get the folder name of the widget
		  szName = szName.substring(0, szName.length() - 1);
		  java.io.File folder = new java.io.File(outPathString + java.io.File.separator + szName);
		  folder.mkdirs();
		} else {
		  java.io.File file = new java.io.File(outPathString + java.io.File.separator + szName);
		  file.createNewFile();
		  // get the output stream of the file
		  java.io.FileOutputStream out = new java.io.FileOutputStream(file);
		  int len;
		  byte[] buffer = new byte[1024];
		  // read (len) bytes into buffer
		  while ((len = inZip.read(buffer)) != -1) {
			// write (len) byte from buffer at the position 0
			out.write(buffer, 0, len);
			out.flush();
		  }
		  out.close();
		}
	}//end of while
		inZip.close();
	}
 
	/**
	 * 解压一个压缩文档 到指定位置
	 * @param zipFileString	压缩包的名字
	 * @param outPathString	指定的路径
	 * @throws Exception
	 */
	public static void unZipFolder(String zipFileString, String outPathString)throws Exception {
		unZipFolder(new java.io.FileInputStream(zipFileString),outPathString);
	}//end of func
 
 
	/**
	 * 压缩文件,文件夹
	 * 
	 * @param srcFilePath	要压缩的文件/文件夹名字
	 * @param zipFilePath	指定压缩的目的和名字
	 * @throws Exception
	 */
	public static void zipFolder(String srcFilePath, String zipFilePath)throws Exception {
	  //创建Zip包
	  java.util.zip.ZipOutputStream outZip = 
              new java.util.zip.ZipOutputStream(new java.io.FileOutputStream(zipFilePath));
 
	  //打开要输出的文件
	  java.io.File file = new java.io.File(srcFilePath);
 
	  //压缩
	  zipFiles(file.getParent()+java.io.File.separator, file.getName(), outZip);
 
	  //完成,关闭
	  outZip.finish();
          outZip.close();
 
        }//end of func
 
	/**
	 * 压缩文件
	 * @param folderPath
	 * @param filePath
	 * @param zipOut
	 * @throws Exception
	 */
	private static void zipFiles(String folderPath, String filePath, 
                     java.util.zip.ZipOutputStream zipOut)throws Exception{
	  if(zipOut == null){
	    return;
	  }
 
	  java.io.File file = new java.io.File(folderPath+filePath);
 
	  //判断是不是文件
	  if (file.isFile()) {
	    java.util.zip.ZipEntry zipEntry =  new java.util.zip.ZipEntry(filePath);
	    java.io.FileInputStream inputStream = new java.io.FileInputStream(file);
	    zipOut.putNextEntry(zipEntry);
 
	    int len;
	    byte[] buffer = new byte[4096];
 
	    while((len=inputStream.read(buffer)) != -1) {
	 	zipOut.write(buffer, 0, len);
	    }
 
	     zipOut.closeEntry();
	  } else {
	   //文件夹的方式,获取文件夹下的子文件
	   String fileList[] = file.list();
 
	   //如果没有子文件, 则添加进去即可
	   if (fileList.length <= 0) {
	  	java.util.zip.ZipEntry zipEntry =  
                       new java.util.zip.ZipEntry(filePath+java.io.File.separator);
		zipOut.putNextEntry(zipEntry);
		zipOut.closeEntry();				
	   }
 
	   //如果有子文件, 遍历子文件
	   for (int i = 0; i < fileList.length; i++) {
		zipFiles(folderPath, filePath+java.io.File.separator+fileList[i], zipOut);
	   }//end of for
 
         }//end of if
 
     }//end of func
}

文件下载 : ZipUtil.java.zip

返回 : Android开发博文汇总

Android上传文件到服务器

时间:2011年06月20日作者:ronald查看次数:1,113 views评论次数:0

  我们很多时要与服务器进行接的数据,上传xml文件,服务器进行读取再返回xml文件的方式非常普遍.
就如我的其中一个应用<<足球即时比分>>,更新比分信息时,就上传xml(因为数据量比较大,直接用参数方式不太适合,所以选择以文件作为参数)再由服务器端返回xml文件,再然后读取xml文件进行比分数据的更新操作.

  以下的代码是<<足球即时比分>>应用的代码片段,代码只用到了Android自带的API,没有添加其它的jar包,以下代码只在需要上传文件时直接调用就可以了. 如果需要上传多个文件时,可以将多个文件进行压缩成一个文件再进行上传.(如何压缩文件或目录可以看我另一篇博文:[ Android压缩文件(压缩目录) ])

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
import java.io.File;
import java.text.MessageFormat;
 
import org.apache.http.HttpResponse;
import org.apache.http.HttpStatus;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.FileEntity;
import org.apache.http.impl.client.DefaultHttpClient;
 
import android.util.Log;
 
/**
 * 上传的url,f 为要上传的文件
 * @url 上传的目标url
 * @f 要上传的文件
 * @return 成功返回true,失败返回false
*/
public static boolean postFile(String url, File f) {
  if(url == null || f == null){
    return false;
  }
  HttpClient client = new DefaultHttpClient();
  HttpPost httpPost = new HttpPost(url);
  HttpResponse response = null;
  try {
    FileEntity entity = new FileEntity(f, "binary/octet-stream");
    httpPost.setEntity(entity);
    response = client.execute(httpPost);
  } catch (Exception e) {
  } finally {
  }
 
  // 判断上传的状态和打印调试信息
  if (response != null
    && response.getStatusLine().getStatusCode() == HttpStatus.SC_OK) {
    // 打印调试信息,上传的url和上传的文件大小
    Log.d("r-base.net",
       MessageFormat.format("upload xml success! url = [{0}],
       file size = [{1}]",url,f.length()));
    return true;
  }
  return false;
}

  以上的代码是Android手机端的,在服务器只需要得到Request的InputStream,再写入文件就可以得到上传的文件
服务器的代码如下:

1
2
3
4
public String getFile(HttpServletRequest request){
  InputSteam in = request.getInputStream();
  org.apache.commons.io.IOUtils.copy(in,new OutputStream("c:/upload_file.file"));
}

返回 : Android开发博文汇总

制作keystore用于android打包

时间:2011年06月11日作者:ronald查看次数:304 views评论次数:0

keystore是由jdk自带的工具keytool生成的.具体生成方式参考一下:

运行cmd进入命令行,在命令行方式下进入JAVA_HOME的bin目录下,再键入以下命令 :

keytool.exe -genkey -alias myapp.keystore -keyalg RSA -validity 20000 -keystore rbase.keystore

制作keystore的截图 :

参数说明:
-alias 后跟的是别名这里是 myapp.keystore
-keyalg 是加密方式这里是 RSA
-validity 是有效期 这里是 20000
-keystore 就是要生成的keystore的名称 这里是 rbase.keystore
制作出来的文件名为 rbase.keystore(文件在JAVA_HOME下的bin目录), 有一别名为myapp.keystore,如果用android打包时文件名与别名都需要使用到.请注意!

相关资源与博文:
使用该制作的keystore进行打包,要记住输入的密码,该密码是ant打包博文的p.properties中的password配置
Android中使用Ant打包(混淆打包)

返回 : Android开发博文汇总

jdk7确定7月28日发布

时间:2011年06月01日作者:ronald查看次数:265 views评论次数:0

该信息已经不是什么新的消息了.因为我看到其它的一些新闻很早就已经知道是该天发布了. 希望不要跳票.

本人一直从05年开始使用jdk5,一直使用很多当时相当新的技术,如 Annotation,foreach方式遍历,泛型等等
由于JDK6没有什么新的特性,所以一直感觉停留在JDK5的版本. 现在知道了JDK7准备要发布,也知道有很多新的功能与特性.还是很期待JDK7的发布,特别感兴趣的是闭包.

已经有一些IDE说已经完全支持JDK7了.像 IntelliJ IDEA 与 NetBean 7.0.也有一些工具说支持JDK7,像我一直使用的Dbvis最新版本.

jdk7发布的日程表 : http://openjdk.java.net/projects/jdk7/milestones/

标签:,分类:Java, 随笔