
如何使一个java程序,一执行,就打开本地某目录下的html文件?比如abchtml, 就像双击打开那样! 15
public static void main(String args[]) throws Exception
{
File file = new File("abchtml");
Runtime ce=RuntimegetRuntime();
Systemoutprintln(filegetAbsolutePath());
ceexec(filegetAbsolutePath());
}
像这样,想打开同目录下的abchtml,怎么不行呢?
恩,你的命令不正确,怎么会打开呢?
试试我给你的代码吧
import javaioFile;
public class TestRuntime {
/
@param args
/
public static void main(String args[]) throws Exception
{
File file = new File("abchtml");
Runtime ce=RuntimegetRuntime();
Systemoutprintln(filegetAbsolutePath());
ceexec("cmd /c start "+filegetAbsolutePath());
}
}
只要在你的同目录下有abchtml,就可以打开了
为了支持全文检索,有必要将HTML格式的文章转化为纯文本格式,因此我设计了一个基本的WebFormatter类,提供一个简单的public static String html2text(String html),将HTML格式转化为Text:
/
File: WebFormatterjava
Created on 2005-6-24
Author: Liao Xuefeng, asklxf@163com
Copyright (C) 2005, Liao Xuefeng
/
package commbokerblogwebutil;
import javautil;
import javatextSimpleDateFormat;
/
Do some format on web display
@author Xuefeng
/
public class WebFormatter {
public static String html2text(String html) {
StringBuffer sb = new StringBuffer(htmllength());
char[] data = htmltoCharArray();
int start = 0;
boolean previousIsPre = false;
Token token = null;
for(;;) {
token = parse(data, start, previousIsPre);
if(token==null)
break;
previousIsPre = tokenisPreTag();
sb = sbappend(tokengetText());
start += tokengetLength();
}
return sbtoString();
}
private static Token parse(char[] data, int start, boolean previousIsPre) {
if(start>=datalength)
return null;
// try to read next char:
char c = data[start];
if(c=='<') {
// this is a tag or comment or script:
int end_index = indexOf(data, start+1, '>');
if(end_index==(-1)) {
// the left is all text!
return new Token(TokenTOKEN_TEXT, data, start, datalength, previousIsPre);
}
String s = new String(data, start, end_index-start+1);
// now we got s="<>":
if(sstartsWith("<!--")) { // this is a comment!
int end_comment_index = indexOf(data, start+1, "-->");
if(end_comment_index==(-1)) {
// illegal end, but treat as comment:
return new Token(TokenTOKEN_COMMENT, data, start, datalength, previousIsPre);
}
else
return new Token(TokenTOKEN_COMMENT, data, start, end_comment_index+3, previousIsPre);
}
String s_lowerCase = stoLowerCase();
if(s_lowerCasestartsWith("<script")) { // this is a script:
int end_script_index = indexOf(data, start+1, "</script>");
if(end_script_index==(-1))
// illegal end, but treat as script:
return new Token(TokenTOKEN_SCRIPT, data, start, datalength, previousIsPre);
else
return new Token(TokenTOKEN_SCRIPT, data, start, end_script_index+9, previousIsPre);
}
else { // this is a tag:
return new Token(TokenTOKEN_TAG, data, start, start+slength(), previousIsPre);
}
}
// this is a text:
int next_tag_index = indexOf(data, start+1, '<');
if(next_tag_index==(-1))
return new Token(TokenTOKEN_TEXT, data, start, datalength, previousIsPre);
return new Token(TokenTOKEN_TEXT, data, start, next_tag_index, previousIsPre);
}
private static int indexOf(char[] data, int start, String s) {
char[] ss = stoCharArray();
// TODO: performance can improve!
for(int i=start; i<(datalength-sslength); i++) {
// compare from data[i] with ss[0]:
boolean match = true;
for(int j=0; j<sslength; j++) {
if(data[i+j]!=ss[j]) {
match = false;
break;
}
}
if(match)
return i;
}
return (-1);
}
private static int indexOf(char[] data, int start, char c) {
for(int i=start; i<datalength; i++) {
if(data[i]==c)
return i;
}
return (-1);
}
}
class Token {
public static final int TOKEN_TEXT = 0; // html text
public static final int TOKEN_COMMENT = 1; // comment like <!-- comments -->
public static final int TOKEN_TAG = 2; // tag like <pre>, <font>, etc
public static final int TOKEN_SCRIPT = 3;
private static final char[] TAG_BR = "<br"toCharArray();
private static final char[] TAG_P = "<p"toCharArray();
private static final char[] TAG_LI = "<li"toCharArray();
private static final char[] TAG_PRE = "<pre"toCharArray();
private static final char[] TAG_HR = "<hr"toCharArray();
private static final char[] END_TAG_TD = "</td>"toCharArray();
private static final char[] END_TAG_TR = "</tr>"toCharArray();
private static final char[] END_TAG_LI = "</li>"toCharArray();
private static final Map SPECIAL_CHARS = new HashMap();
private int type;
private String html; // original html
private String text = null; // text!
private int length = 0; // html length
private boolean isPre = false; // isPre tag
static {
SPECIAL_CHARSput(""", "\"");
SPECIAL_CHARSput("<", "<");
SPECIAL_CHARSput(">", ">");
SPECIAL_CHARSput("&", "&");
SPECIAL_CHARSput("®", "(r)");
SPECIAL_CHARSput("©", "(c)");
SPECIAL_CHARSput(" ", " ");
SPECIAL_CHARSput("£", "");
}
public Token(int type, char[] data, int start, int end, boolean previousIsPre) {
thistype = type;
thislength = end - start;
thishtml = new String(data, start, length);
Systemoutprintln("[Token] html=" + html + "");
parseText(previousIsPre);
Systemoutprintln("[Token] text=" + text + "");
}
public int getLength() {
return length;
}
public boolean isPreTag() {
return isPre;
}
private void parseText(boolean previousIsPre) {
if(type==TOKEN_TAG) {
char[] cs = htmltoCharArray();
if(compareTag(TAG_BR, cs) || compareTag(TAG_P, cs))
text = "\n";
else if(compareTag(TAG_LI, cs))
text = "\n ";
else if(compareTag(TAG_PRE, cs))
isPre = true;
else if(compareTag(TAG_HR, cs))
text = "\n--------\n";
else if(compareString(END_TAG_TD, cs))
text = "\t";
else if(compareString(END_TAG_TR, cs) || compareString(END_TAG_LI, cs))
text = "\n";
}
// text token:
else if(type==TOKEN_TEXT) {
text = toText(html, previousIsPre);
}
}
public String getText() {
return text==null "" : text;
}
private String toText(String html, final boolean isPre) {
char[] cs = htmltoCharArray();
StringBuffer buffer = new StringBuffer(cslength);
int start = 0;
boolean continueSpace = false;
char current, next;
for(;;) {
if(start>=cslength)
break;
current = cs[start]; // read current char
if(start+1<cslength) // and next char
next = cs[start+1];
else
next = '\0';
if(current==' ') {
if(isPre || !continueSpace)
buffer = bufferappend(' ');
continueSpace = true;
// continue loop:
start++;
continue;
}
// not ' ', so:
if(current=='\r' && next=='\n') {
if(isPre)
buffer = bufferappend('\n');
// continue loop:
start+=2;
continue;
}
if(current=='\n' || current=='\r') {
if(isPre)
buffer = bufferappend('\n');
// continue loop:
start++;
continue;
}
// cannot continue space:
continueSpace = false;
if(current=='&') {
// maybe special char:
int length = readUtil(cs, start, ';', 10);
if(length==(-1)) { // just '&':
buffer = bufferappend('&');
// continue loop:
start++;
continue;
}
else { // check if special character:
String spec = new String(cs, start, length);
String specChar = (String)SPECIAL_CHARSget(spec);
if(specChar!=null) { // special chars!
buffer = bufferappend(specChar);
// continue loop:
start+=length;
continue;
}
else { // check if like 'Ӓ':
if(next=='#') { // maybe a char
String num = new String(cs, start+2, length-3);
try {
int code = IntegerparseInt(num);
if(code>0 && code<65536) { // this is a special char:
buffer = bufferappend((char)code);
// continue loop:
start++;
continue;
}
}
catch(Exception e) {}
// just normal char:
buffer = bufferappend("");
// continue loop:
start+=2;
continue;
}
else { // just '&':
buffer = bufferappend('&');
// continue loop:
start++;
continue;
}
}
}
}
else { // just a normal char!
buffer = bufferappend(current);
// continue loop:
start++;
continue;
}
}
return buffertoString();
}
// read from cs[start] util meet the specified char 'util',
// or null if not found:
private int readUtil(final char[] cs, final int start, final char util, final int maxLength) {
int end = start+maxLength;
if(end>cslength)
end = cslength;
for(int i=start; i<start+maxLength; i++) {
if(cs[i]==util) {
return i-start+1;
}
}
return (-1);
}
// compare standard tag "<input" with tag "<INPUT value=aa>"
private boolean compareTag(final char[] ori_tag, char[] tag) {
if(ori_taglength>=taglength)
return false;
for(int i=0; i<ori_taglength; i++) {
if(CharactertoLowerCase(tag[i])!=ori_tag[i])
return false;
}
// the following char should not be a-z:
if(taglength>ori_taglength) {
char c = CharactertoLowerCase(tag[ori_taglength]);
if(c<'a' || c>'z')
return true;
return false;
}
return true;
}
private boolean compareString(final char[] ori, char[] comp) {
if(orilength>complength)
return false;
for(int i=0; i<orilength; i++) {
if(CharactertoLowerCase(comp[i])!=ori[i])
return false;
}
return true;
}
public String toString() {
return html;
}
}
注意,请先将html中的<body></body>部分提取出来,再交给WebFormatter处理,因为html->text转换实质是删除所有标签(某些标签如<br>被转化为'\n')、Script和注释,对于JavaScript生成的动态内容(例如documentwrite)无能为力。
你的意思是用java代码模拟访问一个html网页? 可以用URLConnection
URL url = new URL("你的html文件的>
public class $ {
public static void main(String[] args) {
String path = SystemgetProperty("userdir") + "/src/html/emailhtml";
Systemoutprintln(path);
}
}
动态获取路径
以上就是关于如何使一个java程序,一执行,就打开本地某目录下的html文件比如abc.html, 就像双击打开那样!全部的内容,包括:如何使一个java程序,一执行,就打开本地某目录下的html文件比如abc.html, 就像双击打开那样!、java 读取本地html保存到 my.txt、java打开html文件等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)