免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2704 | 回复: 4
打印 上一主题 下一主题

如何在编译时见一个文本文件内容加载至一个String变量? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-11-10 19:25 |只看该作者 |倒序浏览
一些文本文件需要加载到程序里面,但是加载后再不会变化.所以考虑编译时就载入,增加效率减少系统开销,不需要运行时再一次一次的加载.
不知道又没有方法可以这么作,我尝试了final static,如下所示,不能得到想要的结果,删除test.txt文件就会报错.还请各位大侠指点.
  1 import java.io.File;
  2 import java.io.FileInputStream;
  3
  4 public class FSString{
  5     public final static String TEST = getContent("test.txt");
  6
  7     private static String getContent(String filename){
  8         try{
  9             File file = new File(filename);
 10             int length = (int)file.length();
 11             byte[] content = new byte[length];
 12             FileInputStream fis = new FileInputStream(file);
 13             fis.read(content);
 14             return (new String(content));
 15         }
 16         catch(Exception e){
 17             System.out.println(e.getMessage());
 18             return "Error";
 19         }
 20     }
 21
 22     public static void main(String[] args){
 23         System.out.println(FSString.TEST);
 24     }
 25 }

论坛徽章:
0
2 [报告]
发表于 2008-11-11 09:17 |只看该作者
Static变量,是在当前类载入的时候,才初始化的;

这样并不能实现类似C语言的静态编译,把资源编译到class文件中;

可选的方法:
For Web:
web.xml添加加载Servlet实现;

For General:
main入口方法中,首先调用该类的某个静态方法,触发一下加载就可以;

静态数据是可以做到的;

论坛徽章:
0
3 [报告]
发表于 2008-11-11 17:58 |只看该作者

回复 #2 bohemia 的帖子

谢谢回复,不过你的方法仍然没有能够把资源编译到class里面,我其实就是想把资源编译进去,不用每次调用类都要读取一次文件,因为编译以后,资源文件就不会变化了,所以能嵌入是最好的.

我的另一个想法是写一个类,根据文本文件生成一个新类,然后再编译.
不过如果能有更简单的,更直接的方法更好.

论坛徽章:
0
4 [报告]
发表于 2008-11-11 19:32 |只看该作者
呵呵.也许你的方法也好;;

论坛徽章:
0
5 [报告]
发表于 2008-11-12 21:10 |只看该作者
编译时? 那就只能把文件内容写到 .java 文件中了。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP