1 使用javalangClass类的getResourceAsStream(String name)方法InputStream in = getClass()getResourceAsStream("/configproperties");
在静态方法中,由于不能使用getClass()方法,必须写出类的名字。区别不大。
MyClassclassgetResourceAsStream("/configproperties");使用这个方法,路径前面可以加斜杠也可以不加。根据Class类getResourceAsStream()方法的JavaDoc:
Finds a resource with a given name The rules for searching resources associated with a given class are implemented by the defining class loader of the class This method delegates to this object's class loader If this object was loaded by the bootstrap class loader, the method delegates to ClassLoadergetSystemResourceAsStream
Before delegation, an absolute resource name is constructed from the given resource name using this algorithm:
If the name begins with a '/' ('\u002f'), then the absolute name of the resource is the portion of the name following the '/'
Otherwise, the absolute name is of the following form:
modified_package_name/name
Where the modified_package_name is the package name of this object with '/' substituted for '' ('\u002e')
就是说,这个path假如以斜杠开头,则斜杠后面的部分是文件相对classpath的路径;假如不是,Java会把这个path看作是“包名/文件名”的结构,会尝试在这个类的包里面去找,而不是从classpath开始找;在这种情况下,除非你把properties文件放到MyClassclass所属的包里面,不然都会是null的。
2 使用javalangClassLoader类的getResourceAsStream(String name)方法路径是不能加斜杠的!非常重要。MyClassclassgetClassLoader()getResourceAsStream("configproperties");
这是因为使用classloader进行读取,所输入的参数必须是一个相对classpath的绝对路径,在格式上,一个绝对路径是不能以'/'开头的。
注意这两个方法是同名的,但路径参数的格式截然不同。
3 在Maven中的运用现在几乎所有的web project都是maven project,Maven的默认设置是把
src/main/resources/加入到classpath里面的。那么,最好的做法是把你的properties文件放进src/main/resources里面,然后用上面代码读取。用Class类的,一般要加斜杠;用ClassLoader类的,绝不能加斜杠!
假如是Eclipse里面,需要把这个src/main/resources加到classpath里面。具体 *** 作是右击工程,选择“Configure buildpath”,根据Maven的要求,把src/main/java和src/main/resources都加进去,并且保证Exclude是none,Include是all,或者至少要包括你需要读取的文件。
有个开源的东东-jxljar,可以到下载。
一读取Excel文件内容
/读取Excel文件的内容
@param file 待读取的文件
@return
/
public static String readExcel(File file){
StringBuffer sb = new StringBuffer();
Workbook wb = null;
try {
//构造Workbook(工作薄)对象
wb=WorkbookgetWorkbook(file);
} catch (BiffException e) {
eprintStackTrace();
} catch (IOException e) {
eprintStackTrace();
}
if(wb==null)
return null;
//获得了Workbook对象之后,就可以通过它得到Sheet(工作表)对象了
Sheet[] sheet = wbgetSheets();
if(sheet!=null&&sheetlength>0){
//对每个工作表进行循环
for(int i=0;i<sheetlength;i++){
//得到当前工作表的行数
int rowNum = sheet[i]getRows();
for(int j=0;j<rowNum;j++){
//得到当前行的所有单元格
Cell[] cells = sheet[i]getRow(j);
if(cells!=null&&cellslength>0){
//对每个单元格进行循环
for(int k=0;k<cellslength;k++){
//读取当前单元格的值
String cellValue = cells[k]getContents();
sbappend(cellValue+" ");
}
}
sbappend(" ");
}
sbappend(" ");
}
}
//最后关闭资源,释放内存
wbclose();
return sbtoString();
}
二写入Excel文件
这里有很多格式了,比如文本内容加粗,加上某些颜色等,可以参考jxl的api,同时还推荐一篇不错的文章:
/生成一个Excel文件
@param fileName 要生成的Excel文件名
/
public static void writeExcel(String fileName){
WritableWorkbook wwb = null;
try {
//首先要使用Workbook类的工厂方法创建一个可写入的工作薄(Workbook)对象
wwb = WorkbookcreateWorkbook(new File(fileName));
} catch (IOException e) {
eprintStackTrace();
}
if(wwb!=null){
//创建一个可写入的工作表
//Workbook的createSheet方法有两个参数,第一个是工作表的名称,第二个是工作表在工作薄中的位置
WritableSheet ws = wwbcreateSheet("sheet1", 0);
//下面开始添加单元格
for(int i=0;i<10;i++){
for(int j=0;j<5;j++){
//这里需要注意的是,在Excel中,第一个参数表示列,第二个表示行
Label labelC = new Label(j, i, "这是第"+(i+1)+"行,第"+(j+1)+"列");
try {
//将生成的单元格添加到工作表中
wsaddCell(labelC);
} catch (RowsExceededException e) {
eprintStackTrace();
} catch (WriteException e) {
eprintStackTrace();
}
}
}
try {
//从内存中写入文件中
wwbwrite();
//关闭资源,释放内存
wwbclose();
} catch (IOException e) {
eprintStackTrace();
} catch (WriteException e) {
eprintStackTrace();
}
}
}
三在一个Excel文件中查找是否包含某一个关键字
/搜索某一个文件中是否包含某个关键字
@param file 待搜索的文件
@param keyWord 要搜索的关键字
@return
/
public static boolean searchKeyWord(File file,String keyWord){
boolean res = false;
Workbook wb = null;
try {
//构造Workbook(工作薄)对象
wb=WorkbookgetWorkbook(file);
} catch (BiffException e) {
return res;
} catch (IOException e) {
return res;
}
if(wb==null)
return res;
//获得了Workbook对象之后,就可以通过它得到Sheet(工作表)对象了
Sheet[] sheet = wbgetSheets();
boolean breakSheet = false;
if(sheet!=null&&sheetlength>0){
//对每个工作表进行循环
for(int i=0;i<sheetlength;i++){
if(breakSheet)
break;
//得到当前工作表的行数
int rowNum = sheet[i]getRows();
boolean breakRow = false;
for(int j=0;j<rowNum;j++){
if(breakRow)
break;
//得到当前行的所有单元格
Cell[] cells = sheet[i]getRow(j);
if(cells!=null&&cellslength>0){
boolean breakCell = false;
//对每个单元格进行循环
for(int k=0;k<cellslength;k++){
if(breakCell)
break;
//读取当前单元格的值
String cellValue = cells[k]getContents();
if(cellValue==null)
continue;
if(cellValuecontains(keyWord)){
res = true;
breakCell = true;
breakRow = true;
breakSheet = true;
}
}
}
}
}
}
//最后关闭资源,释放内存
wbclose();
return res;
}
四往Excel中插入图标
插入的实现很容易,参看以下代码:
/往Excel中插入
@param dataSheet 待插入的工作表
@param col 从该列开始
@param row 从该行开始
@param width 所占的列数
@param height 所占的行数
@param imgFile 要插入的文件
/
public static void insertImg(WritableSheet dataSheet, int col, int row, int width,
int height, File imgFile){
WritableImage img = new WritableImage(col, row, width, height, imgFile);
dataSheetaddImage(img);
}
以上代码的注释已经很清楚了,大概也就不用再解释了,我们可以用如下程序验证:
try {
//创建一个工作薄
WritableWorkbook workbook = WorkbookcreateWorkbook(new File("D:/test1xls"));
//待插入的工作表
WritableSheet imgSheet = workbookcreateSheet("Images",0);
//要插入的文件
File imgFile = new File("D:/1png");
//插入到第二行第一个单元格,长宽各占六个单元格
insertImg(imgSheet,0,1,6,6,imgFile);
workbookwrite();
workbookclose();
} catch (IOException e) {
eprintStackTrace();
} catch (WriteException e) {
eprintStackTrace();
}
但是jxl只支持png格式的,jpg格式和gif格式都不支持
五插入页眉页脚
一般的页眉页脚都分为三个部分,左,中,右三部分,利用如下代码可实现插入页眉页脚
/向Excel中加入页眉页脚
@param dataSheet 待加入页眉的工作表
@param left
@param center
@param right
/
public static void setHeader(WritableSheet dataSheet,String left,String center,String right){
HeaderFooter hf = new HeaderFooter();
hfgetLeft()append(left);
hfgetCentre()append(center);
hfgetRight()append(right);
//加入页眉
dataSheetgetSettings()setHeader(hf);
//加入页脚
//dataSheetgetSettings()setFooter(hf);
}
我们可以用如下代码测试该方法:
try {
//创建一个工作薄
WritableWorkbook workbook = WorkbookcreateWorkbook(new File("D:/test1xls"));
//待插入的工作表
WritableSheet dataSheet = workbookcreateSheet("加入页眉",0);
ExcelUtilssetHeader(dataSheet, "chb", "2007-03-06", "第1页,共3页");
workbookwrite();
workbookclose();
} catch (IOException e) {
eprintStackTrace();
} catch (WriteException e) {
eprintStackTrace();
}
六偷懒工具设计之sql2Excel
今天在公司陪山东客户调试,远程登录,我在linux下什么工具都没有,用ssh登录服务器,直接用mysql查询数据库,提出记录中的所有汉字全是乱码。哎,可恶的公司,不让我用windows,要不我就可以用putty或者EMS了,我ft!
甚是不爽之下,我决定自己写个工具了,把客户数据库中的数据全部提取并保存到Excel中,这样我不就可以一目了然了嘛,嘿嘿,好吧,那我就写一个工具吧。
第一部分就是谁都会的jdbc *** 作,连接数据库,提取数据集合。
Connection con;
Statement state;
/初始化连接
@param serverIp
@param dataBase
@param userName
@param password
@throws ClassNotFoundException
@throws SQLException
/
public void init(String serverIp,String dataBase,String userName,String password) throws ClassNotFoundException, SQLException{
ClassforName("commysqljdbcDriver");
//配置数据源
String url="jdbc:mysql://"+serverIp+"/"+dataBase+"useUnicode=true&characterEncoding=GB2312";
con=DriverManagergetConnection(url,userName,password);
}
/得到查询结果集
@param sql
@return
@throws SQLException
/
public ResultSet getResultSet(String sql) throws SQLException{
state = concreateStatement();
ResultSet res = stateexecuteQuery(sql);
return res;
}
/关闭连接
@throws SQLException
/
public void close() throws SQLException{
if(con!=null)
conclose();
if(state!=null)
stateclose();
}
第二部分就是把ResultSet中的记录写入一个Excel文件
*** 作Excel,我用的是jxl,不熟的同学可以参考:利用java *** 作Excel文件
/将查询结果写入Excel文件中
@param rs
@param file
@throws SQLException
/
public void writeExcel(ResultSet rs,File file) throws SQLException{
WritableWorkbook wwb = null;
try{
//首先要使用Workbook类的工厂方法创建一个可写入的工作薄(Workbook)对象
wwb = WorkbookcreateWorkbook(file);
} catch (IOException e){
eprintStackTrace();
}
if(wwb!=null){
WritableSheet ws = wwbcreateSheet("sheet1", 0);
int i=0;
while(rsnext()){
Label label1 = new Label(0, i, rsgetString("id"));
Label label2 = new Label(1, i, rsgetString("category"));
try {
wsaddCell(label1);
wsaddCell(label2);
} catch (RowsExceededException e) {
eprintStackTrace();
} catch (WriteException e) {
eprintStackTrace();
}
i++;
}
try {
//从内存中写入文件中
wwbwrite();
//关闭资源,释放内存
wwbclose();
} catch (IOException e) {
eprintStackTrace();
} catch (WriteException e){
eprintStackTrace();
}
}
}
测试程序:
Sql2Excel se = new Sql2Excel();
try {
seinit("127001","mydabase", "root", "1234");
ResultSet rs = segetResultSet("select id,category from xx ");
sewriteExcel(rs, new File("/root/sql2excelxls"));
seclose();
} catch (ClassNotFoundException e) {
eprintStackTrace();
} catch (SQLException e) {
eprintStackTrace();
}
以上就是关于java web工程中读取properties文件,路径一直不知道怎么写全部的内容,包括:java web工程中读取properties文件,路径一直不知道怎么写、java怎么获取远程带参数的excel文件、等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)