在android环境下,可以通过反射机制获取。
在PC环境下就麻烦了,一般是手动解压apk,在res/drawable中可以找到图标文件.反编译的话,用apktool比较多。
这里是自动调用apktool中反编译的代码,然后读取androidManifest.xml和strings.xml来获取apk应用的名称和图标.
...上代码吧,抛砖引玉,小弟初学不久,各位多批评指正。
注意要有apktool.jar,这个下载一个apktool工具就找到了。import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;import brut.androlib.AndrolibException;
import brut.apktool.Main;
public class Unzip {
public static void main(String[] args){
File directory = new File(".");
//获取当前工作目录
String currentPath = null;
try {
currentPath = directory.getCanonicalPath();
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
// String[] apkFilearr = searchApk("d:\\apkssdf", ".apk");
String[] apkFilearr = searchApk(currentPath, ".apk");
for(String file:apkFilearr){
System.out.println(file);
getIcons(file);
}
// String f = "d:\\apks\\digua.apk";
// getIcons(f);
}
public static String[] getIconfile(String targetDir){
String manifestFilepath = targetDir+""+File.separator+"AndroidManifest.xml";
String keyLine = "android:icon=";
String nameLine = "android:label";
String iconFilePath[] = new String[2];
try{
File file = new File(manifestFilepath);
// BufferedInputStream bin = new BufferedInputStream(new FileInputStream(appDatafilePath));
// byte[] buff = new byte[(int)file.length()];
InputStreamReader read = new InputStreamReader(new FileInputStream(file),"UTF-8");
String fileContent = "";
BufferedReader reader = new BufferedReader(read);
String lineContent;
while ((lineContent = reader.readLine()) != null) {
fileContent = fileContent+lineContent+"\n";
}
String[] lines = fileContent.split("\n");
System.out.println("lines.length "+lines.length);
// bin.read(buff);
OutputStreamWriter fout = new OutputStreamWriter(new FileOutputStream(file),"UTF-8");
// String str = new String(buff);
// String[] lines = str.split("\n");
for(String line : lines){
String line_changed = line;
if(line.contains(keyLine)){
System.out.println(line);
int fi = line.indexOf("drawable");
int end = line.indexOf("\"",fi);
while(end<fi){
end = line.indexOf("\"", end);
}
System.out.println(fi);
System.out.println(end);
iconFilePath[0] = line.substring(fi+9,end)+".png";
System.out.println(iconFilePath[0]);
}
if(line.contains(nameLine)){
System.out.println(line);
int fi = line.indexOf("string");
int end = line.indexOf("\"",fi);
while(end<fi){
end = line.indexOf("\"", end);
}
System.out.println(fi);
System.out.println(end);
iconFilePath[1] = line.substring(fi+7,end);
System.out.println(iconFilePath[1]);
}
fout.write(line_changed+"\n");
}
fout.flush();
fout.close();
reader.close();
// bin.close();
}catch(FileNotFoundException ex){
ex.printStackTrace();
}catch(IOException ioe){
ioe.printStackTrace();
}
String stringsPath = targetDir+""+File.separator+"res"+File.separator+"values"+File.separator+"strings.xml";
try{
File file = new File(stringsPath);
InputStreamReader read = new InputStreamReader(new FileInputStream(file),"UTF-8");
String fileContent = "";
BufferedReader reader = new BufferedReader(read);
String lineContent;
while ((lineContent = reader.readLine()) != null) {
fileContent = fileContent+lineContent+"\n";
}
String[] lines = fileContent.split("\n");
System.out.println("lines.length "+lines.length);
OutputStreamWriter fout = new OutputStreamWriter(new FileOutputStream(file),"UTF-8");
for(String line : lines){
String line_changed = line;
if(line.contains(iconFilePath[1])){
System.out.println(line);
int fi = line.indexOf(">");
int end = line.indexOf("<",fi);
System.out.println(fi);
System.out.println(end);
iconFilePath[1] = line.substring(fi+1,end);
System.out.println(iconFilePath[1]);
break;
}
fout.write(line_changed+"\n");
}
fout.flush();
fout.close();
reader.close();
// bin.close();
}catch(FileNotFoundException ex){
ex.printStackTrace();
}catch(IOException ioe){
ioe.printStackTrace();
}
return iconFilePath;
}
public static String[] getfilepaths(String dir, String searchname){
String[] results = findFileInDir(dir, searchname).toString().split(",");
return results;
} public static StringBuffer findFileInDir(String dir, String searchname) {
StringBuffer temp = new StringBuffer();
File root = new File(dir);
File[] filesOrDirs = root.listFiles();
if (filesOrDirs == null)
return temp;
String[] result = new String[filesOrDirs.length];
for (int i = 0; i < filesOrDirs.length; i++) {
if (filesOrDirs[i].isDirectory()) {
StringBuffer t = findFileInDir(filesOrDirs[i].getAbsolutePath(), searchname);
if(t!=null&&!t.equals(""))
temp.append(t);
} else {
result[i] = filesOrDirs[i].getName();
if(result[i].equals(searchname)){
temp.append(filesOrDirs[i]);
temp.append(",");
}
}
}
return temp;
}
private static boolean deleteDir(File dir) { if (dir.isDirectory()) {
String[] children = dir.list();
for (int i=0; i<children.length; i++) {
boolean success = deleteDir(new File(dir, children[i]));
if (!success) {
return false;
}
}
} // The directory is now empty so now it can be smoked
return dir.delete();
}
public static void getIcons(final String apkfile){
try {
File apkFile = new File(apkfile);
String fileName = apkFile.getName();
String path = apkFile.getParent();
final String targetDir = path+File.separator+fileName.substring(0,fileName.lastIndexOf("."))+"Dir";
final String iconDir = path+File.separator+"iconsDir";
File dir = new File(targetDir);
File iconsdir = new File(iconDir);
if(dir.exists()){
deleteDir(dir);
}
if(!iconsdir.exists()){
iconsdir.mkdir();
}
final String[] argss = new String[]{
"f",apkfile,targetDir
};
System.out.println(apkfile);
System.out.println(targetDir);
long time1 = System.currentTimeMillis();
Main.main(argss);
String result[] = getIconfile(targetDir);
String[] iconfilepath = getfilepaths(targetDir,result[0]);
File iconDirfile = new File(iconDir+File.separator+result[1]);
if(!iconDirfile.exists()){
boolean b = iconDirfile.mkdir();
System.out.println("创建目录 "+b);
}
AutoCopyFiles copyFiles = new AutoCopyFiles();
for(int i=0;i<iconfilepath.length;i++){
copyFiles.copyFile(iconfilepath[i], iconDirfile.getAbsolutePath()+File.separator+i+"_"+result[0]);
}
// deleteDir(new File(targetDir));
long time2 = System.currentTimeMillis();
System.out.println("反编译提取图标耗时 "+(time2-time1));
} catch (AndrolibException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
// 扫描.APK文件
public static String[] searchApk(String dir, String suf) {
StringBuffer sb = sApk(dir, suf);
if(sb.length()==0)
return null;
String[] result = sb.toString().split(",");
return result;
} public static StringBuffer sApk(String dir, String suf) {
StringBuffer temp = new StringBuffer();
File root = new File(dir);
File[] filesOrDirs = root.listFiles();
if (filesOrDirs == null)
return temp;
String[] result = new String[filesOrDirs.length];
for (int i = 0; i < filesOrDirs.length; i++) {
//add by Dengjy @2011-10-26, 把sina/weibo目录从扫描路径中去掉(因为里面有太多的临时文件)
if (filesOrDirs[i].isDirectory()) {
StringBuffer t =sApk(filesOrDirs[i].getAbsolutePath(), suf);
// serachApk(filesOrDirs[i].getAbsolutePath()).append(",");
// StringBuffer k = (t!=null)? ((!t.equals(""))?t.append(","):null): null;
if(t!=null&&!t.equals(""))
temp.append(t);
} else {
result[i] = filesOrDirs[i].getName();
if((suf == null)&&(!result[i].equals(""))){
temp.append(filesOrDirs[i].getAbsolutePath()).append(",");
}else if (result[i].endsWith(suf)) { // 取与suf匹配后缀的文件名
temp.append(filesOrDirs[i].getAbsolutePath()).append(",");
}
}
}
if(temp.length()>1&&temp.charAt(temp.length()-2)==','&&temp.charAt(temp.length()-1)==','){
// LogUtils.e(AppData.tag, "TEMP"+ temp.charAt(temp.length()-2)+" "+ temp.charAt(temp.length()-1));
temp.delete(temp.length()-2, temp.length()-1);
}
return temp;
}
}
在PC环境下就麻烦了,一般是手动解压apk,在res/drawable中可以找到图标文件.反编译的话,用apktool比较多。
这里是自动调用apktool中反编译的代码,然后读取androidManifest.xml和strings.xml来获取apk应用的名称和图标.
...上代码吧,抛砖引玉,小弟初学不久,各位多批评指正。
注意要有apktool.jar,这个下载一个apktool工具就找到了。import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;import brut.androlib.AndrolibException;
import brut.apktool.Main;
public class Unzip {
public static void main(String[] args){
File directory = new File(".");
//获取当前工作目录
String currentPath = null;
try {
currentPath = directory.getCanonicalPath();
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
// String[] apkFilearr = searchApk("d:\\apkssdf", ".apk");
String[] apkFilearr = searchApk(currentPath, ".apk");
for(String file:apkFilearr){
System.out.println(file);
getIcons(file);
}
// String f = "d:\\apks\\digua.apk";
// getIcons(f);
}
public static String[] getIconfile(String targetDir){
String manifestFilepath = targetDir+""+File.separator+"AndroidManifest.xml";
String keyLine = "android:icon=";
String nameLine = "android:label";
String iconFilePath[] = new String[2];
try{
File file = new File(manifestFilepath);
// BufferedInputStream bin = new BufferedInputStream(new FileInputStream(appDatafilePath));
// byte[] buff = new byte[(int)file.length()];
InputStreamReader read = new InputStreamReader(new FileInputStream(file),"UTF-8");
String fileContent = "";
BufferedReader reader = new BufferedReader(read);
String lineContent;
while ((lineContent = reader.readLine()) != null) {
fileContent = fileContent+lineContent+"\n";
}
String[] lines = fileContent.split("\n");
System.out.println("lines.length "+lines.length);
// bin.read(buff);
OutputStreamWriter fout = new OutputStreamWriter(new FileOutputStream(file),"UTF-8");
// String str = new String(buff);
// String[] lines = str.split("\n");
for(String line : lines){
String line_changed = line;
if(line.contains(keyLine)){
System.out.println(line);
int fi = line.indexOf("drawable");
int end = line.indexOf("\"",fi);
while(end<fi){
end = line.indexOf("\"", end);
}
System.out.println(fi);
System.out.println(end);
iconFilePath[0] = line.substring(fi+9,end)+".png";
System.out.println(iconFilePath[0]);
}
if(line.contains(nameLine)){
System.out.println(line);
int fi = line.indexOf("string");
int end = line.indexOf("\"",fi);
while(end<fi){
end = line.indexOf("\"", end);
}
System.out.println(fi);
System.out.println(end);
iconFilePath[1] = line.substring(fi+7,end);
System.out.println(iconFilePath[1]);
}
fout.write(line_changed+"\n");
}
fout.flush();
fout.close();
reader.close();
// bin.close();
}catch(FileNotFoundException ex){
ex.printStackTrace();
}catch(IOException ioe){
ioe.printStackTrace();
}
String stringsPath = targetDir+""+File.separator+"res"+File.separator+"values"+File.separator+"strings.xml";
try{
File file = new File(stringsPath);
InputStreamReader read = new InputStreamReader(new FileInputStream(file),"UTF-8");
String fileContent = "";
BufferedReader reader = new BufferedReader(read);
String lineContent;
while ((lineContent = reader.readLine()) != null) {
fileContent = fileContent+lineContent+"\n";
}
String[] lines = fileContent.split("\n");
System.out.println("lines.length "+lines.length);
OutputStreamWriter fout = new OutputStreamWriter(new FileOutputStream(file),"UTF-8");
for(String line : lines){
String line_changed = line;
if(line.contains(iconFilePath[1])){
System.out.println(line);
int fi = line.indexOf(">");
int end = line.indexOf("<",fi);
System.out.println(fi);
System.out.println(end);
iconFilePath[1] = line.substring(fi+1,end);
System.out.println(iconFilePath[1]);
break;
}
fout.write(line_changed+"\n");
}
fout.flush();
fout.close();
reader.close();
// bin.close();
}catch(FileNotFoundException ex){
ex.printStackTrace();
}catch(IOException ioe){
ioe.printStackTrace();
}
return iconFilePath;
}
public static String[] getfilepaths(String dir, String searchname){
String[] results = findFileInDir(dir, searchname).toString().split(",");
return results;
} public static StringBuffer findFileInDir(String dir, String searchname) {
StringBuffer temp = new StringBuffer();
File root = new File(dir);
File[] filesOrDirs = root.listFiles();
if (filesOrDirs == null)
return temp;
String[] result = new String[filesOrDirs.length];
for (int i = 0; i < filesOrDirs.length; i++) {
if (filesOrDirs[i].isDirectory()) {
StringBuffer t = findFileInDir(filesOrDirs[i].getAbsolutePath(), searchname);
if(t!=null&&!t.equals(""))
temp.append(t);
} else {
result[i] = filesOrDirs[i].getName();
if(result[i].equals(searchname)){
temp.append(filesOrDirs[i]);
temp.append(",");
}
}
}
return temp;
}
private static boolean deleteDir(File dir) { if (dir.isDirectory()) {
String[] children = dir.list();
for (int i=0; i<children.length; i++) {
boolean success = deleteDir(new File(dir, children[i]));
if (!success) {
return false;
}
}
} // The directory is now empty so now it can be smoked
return dir.delete();
}
public static void getIcons(final String apkfile){
try {
File apkFile = new File(apkfile);
String fileName = apkFile.getName();
String path = apkFile.getParent();
final String targetDir = path+File.separator+fileName.substring(0,fileName.lastIndexOf("."))+"Dir";
final String iconDir = path+File.separator+"iconsDir";
File dir = new File(targetDir);
File iconsdir = new File(iconDir);
if(dir.exists()){
deleteDir(dir);
}
if(!iconsdir.exists()){
iconsdir.mkdir();
}
final String[] argss = new String[]{
"f",apkfile,targetDir
};
System.out.println(apkfile);
System.out.println(targetDir);
long time1 = System.currentTimeMillis();
Main.main(argss);
String result[] = getIconfile(targetDir);
String[] iconfilepath = getfilepaths(targetDir,result[0]);
File iconDirfile = new File(iconDir+File.separator+result[1]);
if(!iconDirfile.exists()){
boolean b = iconDirfile.mkdir();
System.out.println("创建目录 "+b);
}
AutoCopyFiles copyFiles = new AutoCopyFiles();
for(int i=0;i<iconfilepath.length;i++){
copyFiles.copyFile(iconfilepath[i], iconDirfile.getAbsolutePath()+File.separator+i+"_"+result[0]);
}
// deleteDir(new File(targetDir));
long time2 = System.currentTimeMillis();
System.out.println("反编译提取图标耗时 "+(time2-time1));
} catch (AndrolibException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
// 扫描.APK文件
public static String[] searchApk(String dir, String suf) {
StringBuffer sb = sApk(dir, suf);
if(sb.length()==0)
return null;
String[] result = sb.toString().split(",");
return result;
} public static StringBuffer sApk(String dir, String suf) {
StringBuffer temp = new StringBuffer();
File root = new File(dir);
File[] filesOrDirs = root.listFiles();
if (filesOrDirs == null)
return temp;
String[] result = new String[filesOrDirs.length];
for (int i = 0; i < filesOrDirs.length; i++) {
//add by Dengjy @2011-10-26, 把sina/weibo目录从扫描路径中去掉(因为里面有太多的临时文件)
if (filesOrDirs[i].isDirectory()) {
StringBuffer t =sApk(filesOrDirs[i].getAbsolutePath(), suf);
// serachApk(filesOrDirs[i].getAbsolutePath()).append(",");
// StringBuffer k = (t!=null)? ((!t.equals(""))?t.append(","):null): null;
if(t!=null&&!t.equals(""))
temp.append(t);
} else {
result[i] = filesOrDirs[i].getName();
if((suf == null)&&(!result[i].equals(""))){
temp.append(filesOrDirs[i].getAbsolutePath()).append(",");
}else if (result[i].endsWith(suf)) { // 取与suf匹配后缀的文件名
temp.append(filesOrDirs[i].getAbsolutePath()).append(",");
}
}
}
if(temp.length()>1&&temp.charAt(temp.length()-2)==','&&temp.charAt(temp.length()-1)==','){
// LogUtils.e(AppData.tag, "TEMP"+ temp.charAt(temp.length()-2)+" "+ temp.charAt(temp.length()-1));
temp.delete(temp.length()-2, temp.length()-1);
}
return temp;
}
}
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.io.Reader;
import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;public class AutoCopyFiles { /**
* 新建目录
*
* @param folderPath
* String 如 c:/fqf
* @return boolean
*/
public void newFolder(String folderPath) {
try {
String filePath = folderPath;
filePath = filePath.toString();
java.io.File myFilePath = new java.io.File(filePath);
if (!myFilePath.exists()) {
myFilePath.mkdir();
}
} catch (Exception e) {
System.out.println("新建目录操作出错");
e.printStackTrace();
}
} /**
* 新建文件
*
* @param filePathAndName
* String 文件路径及名称 如c:/fqf.txt
* @param fileContent
* String 文件内容
* @return boolean
*/
public void newFile(String filePathAndName, String fileContent) { try {
String filePath = filePathAndName;
filePath = filePath.toString();
File myFilePath = new File(filePath);
if (!myFilePath.exists()) {
myFilePath.createNewFile();
}
FileWriter resultFile = new FileWriter(myFilePath);
PrintWriter myFile = new PrintWriter(resultFile);
String strContent = fileContent;
myFile.println(strContent);
resultFile.close(); } catch (Exception e) {
System.out.println("新建文件操作出错");
e.printStackTrace(); } } /**
* 删除文件
*
* @param filePathAndName
* String 文件路径及名称 如c:/fqf.txt
* @param fileContent
* String
* @return boolean
*/
public void delFile(String filePathAndName) {
try {
String filePath = filePathAndName;
filePath = filePath.toString();
java.io.File myDelFile = new java.io.File(filePath);
myDelFile.delete(); } catch (Exception e) {
System.out.println("删除文件操作出错");
e.printStackTrace(); } } /**
* 删除文件夹
*
* @param filePathAndName
* String 文件夹路径及名称 如c:/fqf
* @param fileContent
* String
* @return boolean
*/
public void delFolder(String folderPath) {
try {
delAllFile(folderPath); // 删除完里面所有内容
String filePath = folderPath;
filePath = filePath.toString();
java.io.File myFilePath = new java.io.File(filePath);
myFilePath.delete(); // 删除空文件夹 } catch (Exception e) {
System.out.println("删除文件夹操作出错");
e.printStackTrace(); } } /**
* 删除文件夹里面的所有文件
*
* @param path
* String 文件夹路径 如 c:/fqf
*/
public void delAllFile(String path) {
File file = new File(path);
if (!file.exists()) {
return;
}
if (!file.isDirectory()) {
return;
}
String[] tempList = file.list();
File temp = null;
for (int i = 0; i < tempList.length; i++) {
if (path.endsWith(File.separator)) {
temp = new File(path + tempList[i]);
} else {
temp = new File(path + File.separator + tempList[i]);
}
if (temp.isFile()) {
temp.delete();
}
if (temp.isDirectory()) {
delAllFile(path + "/" + tempList[i]);// 先删除文件夹里面的文件
delFolder(path + "/" + tempList[i]);// 再删除空文件夹
}
}
} /**
* 复制单个文件
*
* @param oldPath
* String 原文件路径 如:c:/fqf.txt
* @param newPath
* String 复制后路径 如:f:/fqf.txt
* @return boolean
*/
public void copyFile(String oldPath, String newPath) {
try {
int bytesum = 0;
int byteread = 0;
File oldfile = new File(oldPath);
if (oldfile.exists()) { // 文件存在时
InputStream inStream = new FileInputStream(oldPath); // 读入原文件
FileOutputStream fs = new FileOutputStream(newPath);
byte[] buffer = new byte[1444];
while ((byteread = inStream.read(buffer)) != -1) {
bytesum += byteread; // 字节数 文件大小
System.out.println(bytesum);
fs.write(buffer, 0, byteread);
}
inStream.close();
}
} catch (Exception e) {
System.out.println("复制单个文件操作出错");
e.printStackTrace(); } } /**
* 复制整个文件夹内容
*
* @param oldPath
* String 原文件路径 如:c:/fqf
* @param newPath
* String 复制后路径 如:f:/fqf/ff
* @return boolean
*/
public void copyFolder(String oldPath, String newPath) { try {
(new File(newPath)).mkdirs(); // 如果文件夹不存在 则建立新文件夹
File a = new File(oldPath);
String[] file = a.list();
File temp = null;
for (int i = 0; i < file.length; i++) {
if (oldPath.endsWith(File.separator)) {
temp = new File(oldPath + file[i]);
} else {
temp = new File(oldPath + File.separator + file[i]);
} if (temp.isFile()) {
FileInputStream input = new FileInputStream(temp);
FileOutputStream output = new FileOutputStream(newPath
+ "/" + (temp.getName()).toString());
byte[] b = new byte[1024 * 5];
int len;
while ((len = input.read(b)) != -1) {
output.write(b, 0, len);
}
output.flush();
output.close();
input.close();
}
if (temp.isDirectory()) {// 如果是子文件夹
copyFolder(oldPath + "/" + file[i], newPath + "/" + file[i]);
}
}
} catch (Exception e) {
System.out.println("复制整个文件夹内容操作出错");
e.printStackTrace(); } } /**
* 移动文件到指定目录
*
* @param oldPath
* String 如:c:/fqf.txt
* @param newPath
* String 如:d:/fqf.txt
*/
public void moveFile(String oldPath, String newPath) {
copyFile(oldPath, newPath);
delFile(oldPath); } /**
* 移动文件到指定目录
*
* @param oldPath
* String 如:c:/fqf.txt
* @param newPath
* String 如:d:/fqf.txt
*/
public void moveFolder(String oldPath, String newPath) {
copyFolder(oldPath, newPath);
delFolder(oldPath); }
/**
* 以字符为单位读取文件,常用于读文本,数字等类型的文件
*/
public static void readFileByChars(String fileName) {
File file = new File(fileName);
Reader reader = null;
try {
System.out.println("以字符为单位读取文件内容,一次读一个字节:");
// 一次读一个字符
reader = new InputStreamReader(new FileInputStream(file));
int tempchar;
while ((tempchar = reader.read()) != -1) {
// 对于windows下,\r\n这两个字符在一起时,表示一个换行。
// 但如果这两个字符分开显示时,会换两次行。
// 因此,屏蔽掉\r,或者屏蔽\n。否则,将会多出很多空行。
if (((char) tempchar) != '\r') {
System.out.print((char) tempchar);
}
}
reader.close();
} catch (Exception e) {
e.printStackTrace();
}
try {
System.out.println("以字符为单位读取文件内容,一次读多个字节:");
// 一次读多个字符
char[] tempchars = new char[30];
int charread = 0;
reader = new InputStreamReader(new FileInputStream(fileName));
// 读入多个字符到字符数组中,charread为一次读取字符数
while ((charread = reader.read(tempchars)) != -1) {
// 同样屏蔽掉\r不显示
if ((charread == tempchars.length)
&& (tempchars[tempchars.length - 1] != '\r')) {
System.out.print(tempchars);
} else {
for (int i = 0; i < charread; i++) {
if (tempchars[i] == '\r') {
continue;
} else {
System.out.print(tempchars[i]);
}
}
}
} } catch (Exception e1) {
e1.printStackTrace();
} finally {
if (reader != null) {
try {
reader.close();
} catch (IOException e1) {}
}
}
} /**
* 以行为单位读取文件,常用于读面向行的格式化文件
*/
public static StringBuffer readFileByLines(String fileName) {
File file = new File(fileName);
StringBuffer sb = new StringBuffer();
BufferedReader reader = null;
try {
System.out.println("以行为单位读取文件内容,一次读一整行:");
reader = new BufferedReader(new FileReader(file));
String tempString = null;
int line = 1;
// 一次读入一行,直到读入null为文件结束
while ((tempString = reader.readLine()) != null) {
// 显示行号
sb.append(tempString);
line++;
}
reader.close();
} catch (IOException e) {
e.printStackTrace();
} finally {
if (reader != null) {
try {
reader.close();
} catch (IOException e1) {}
}
}
return sb;
} /**
*
* @param str
* @return 编码
*/
public static String encode(String str) {
if (null == str)
return null;
if ("".equals(str))
return "";
try {
return URLEncoder.encode(str, "UTF-8");
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
return null;
}
}