實(shí)現(xiàn)輸出從控制臺(tái)到GUI并不復(fù)雜 只需要將標(biāo)準(zhǔn)輸出重定向
大廠網(wǎng)站制作公司哪家好,找創(chuàng)新互聯(lián)!從網(wǎng)頁(yè)設(shè)計(jì)、網(wǎng)站建設(shè)、微信開(kāi)發(fā)、APP開(kāi)發(fā)、響應(yīng)式網(wǎng)站建設(shè)等網(wǎng)站項(xiàng)目制作,到程序開(kāi)發(fā),運(yùn)營(yíng)維護(hù)。創(chuàng)新互聯(lián)從2013年開(kāi)始到現(xiàn)在10年的時(shí)間,我們擁有了豐富的建站經(jīng)驗(yàn)和運(yùn)維經(jīng)驗(yàn),來(lái)保證我們的工作的順利進(jìn)行。專注于網(wǎng)站建設(shè)就選創(chuàng)新互聯(lián)。
重定向標(biāo)準(zhǔn)輸出很easy System 類里有兩個(gè)靜態(tài)方法setErr(PrintStream err) 和 setOut(PrintStream out) 分別用于重定位 標(biāo)準(zhǔn) 錯(cuò)誤輸出流和 標(biāo)準(zhǔn) 輸出流 只需要在程序初始時(shí)設(shè)置即可
// GUIPrintStream guiPrintStream = new GUIPrintStream(System out jTextArea);
System setErr(guiPrintStream);
System setOut(guiPrintStream);
在上面的代碼中 我們發(fā)現(xiàn)一個(gè)新的類 GUIPrintStream 這是我們?yōu)?PrintStream 所做的包裝 因?yàn)槲覀兊妮敵瞿繕?biāo)位置是GUI 所以需要在 PrintStream 上做些文章 大家請(qǐng)看下面 GUIPrintStream 的代碼
Java代碼
/**//*
* To change this template choose Tools | Templates
* and open the template in the editor
*/
import java io OutputStream;
import java io PrintStream;
import javax swing SwingUtilities;
import javax swing text JTextComponent;
/** *//**
* 輸出到文本組件的流
*
* @author Chen Wei
* @website chenwei mobi
* @email chenw
*/
public class GUIPrintStream extends PrintStream {
private JTextComponent ponent;
private StringBuffer *** = new StringBuffer();
public GUIPrintStream(OutputStream out JTextComponent ponent) {
super(out);
ponent = ponent;
}
/** *//**
* 重寫(xiě)write()方法 將輸出信息填充到GUI組件
* @param buf
* @param off
* @param len
*/
@Override
public void write(byte[] buf int off int len) {
final String message = new String(buf off len);
SwingUtilities invokeLater(new Runnable() {
public void run() {
*** append(message);
ponent setText( *** toString());
}
});
}
}
/**//*
* To change this template choose Tools | Templates
* and open the template in the editor
*/
import java io OutputStream;
import java io PrintStream;
import javax swing SwingUtilities;
import javax swing text JTextComponent;
/** *//**
* 輸出到文本組件的流
*
* @author Chen Wei
* @website chenwei mobi
* @email chenw
*/
public class GUIPrintStream extends PrintStream {
private JTextComponent ponent;
private StringBuffer *** = new StringBuffer();
public GUIPrintStream(OutputStream out JTextComponent ponent) {
super(out);
ponent = ponent;
}
/** *//**
* 重寫(xiě)write()方法 將輸出信息填充到GUI組件
* @param buf
* @param off
* @param len
*/
@Override
public void write(byte[] buf int off int len) {
final String message = new String(buf off len);
SwingUtilities invokeLater(new Runnable() {
public void run() {
*** append(message);
ponent setText( *** toString());
}
});
}
}
類 GUIPrintStream 繼承自 PrintStream 并且對(duì)它進(jìn)行了一些修改
GUIPrintStream 在構(gòu)造函數(shù)中增加了一個(gè) JTextComponent 變量 它就是我們的目標(biāo)輸出 GUI 組件 它規(guī)定了目標(biāo)輸出組件是一個(gè)文本組件 接下來(lái)覆寫(xiě)了 write(byte[] buf int off int len)方法 這個(gè)方法原來(lái)的作用是將 len 字節(jié)從指定的初始偏移量為 off 的 byte 數(shù)組寫(xiě)入此流 現(xiàn)在經(jīng)過(guò)我們的修改 變成了將 byte 數(shù)組包裝成 String 寫(xiě)入目標(biāo) GUI 組件
簡(jiǎn)單的代碼完成了將標(biāo)準(zhǔn)輸出重定向到 GUI 的全過(guò)程 由此延伸 還可以將標(biāo)準(zhǔn)輸出重定向到文本文件 從GUI獲取標(biāo)準(zhǔn)輸入等 就不一一介紹
測(cè)試
Java代碼
public class MainFrame extends javax swing JFrame {
public MainFrame() {
initComponents();
// 重定向到通過(guò)文本組件構(gòu)建的組件輸出流中
System setOut(new GUIPrintStream(System out textArea));
}
private void initComponents() {
scrollPane = new javax swing JScrollPane();
textArea = new javax swing JTextArea();
btnOut = new javax swing JButton();
setDefaultCloseOperation(javax swing WindowConstants EXIT_ON_CLOSE);
setTitle( 標(biāo)準(zhǔn)輸出重定向到GUI chenwei mobi );
textArea setColumns( );
textArea setRows( );
scrollPane setViewportView(textArea);
getContentPane() add(scrollPane java awt BorderLayout CENTER);
btnOut setText( System out println(System getProperties()); );
btnOut addActionListener(new java awt event ActionListener() {
public void actionPerformed(java awt event ActionEvent evt) {
btnOutActionPerformed(evt);
}
});
getContentPane() add(btnOut java awt BorderLayout PAGE_END);
pack();
}
private void btnOutActionPerformed(java awt event ActionEvent evt) {
System out println(System getProperties());
}
/**
* @param args the mand line arguments
*/
public static void main(String args[]) {
java awt EventQueue invokeLater(new Runnable() {
public void run() {
new MainFrame() setVisible(true);
}
});
}
private javax swing JButton btnOut;
private javax swing JScrollPane scrollPane;
private javax swing JTextArea textArea;
lishixinzhi/Article/program/Java/hx/201311/25870
Java具有使用Runtime exec對(duì)本地程序調(diào)用進(jìn)行重定向的能力 但是用重定向或者管道進(jìn)行命令調(diào)用將會(huì)出錯(cuò) 解決這一問(wèn)題的辦法是通過(guò)命令shell運(yùn)行命令 在Java中調(diào)用本地程序會(huì)破壞平臺(tái)獨(dú)立性規(guī)則 但是經(jīng)常需要這么做才行 以下是一個(gè)簡(jiǎn)單類的范例 展示了在Unix下運(yùn)行l(wèi)s命令的情形 import java io BufferedInputStream;import java io IOException;public class ExecLs { static public void main(String[] args) { String cmd = ls try { Process ps = Runtime getRuntime() exec(cmds); System out print(loadStream(ps getInputStream())); System err print(loadStream(ps getErrorStream())); } catch(IOException ioe) { ioe printStackTrace(); } } // read an input stream into a String static String loadStream(InputStream in) throws IOException { int ptr = ; in = new BufferedInputStream(in); StringBuffer buffer = new StringBuffer(); while( (ptr = in read()) != ) { buffer append((char)ptr); } return buffer toString(); }} 上述代碼中重要的部分是exec方法和命令字符串ls 本程序?qū)⑤敵鲞\(yùn)行目錄下的列表細(xì)節(jié) 那么 如果你想重定向這些細(xì)節(jié)內(nèi)容到文件該怎么辦?這一命令行的輸入應(yīng)該寫(xiě)成ls FILE 但是當(dāng)你將cmd變量改變成這樣的話 運(yùn)行就會(huì)出錯(cuò) 如下 /bin/ls: : No such file or directory/bin/ls: FILE: No such file or directory 出錯(cuò)的原因在于額外的參數(shù)被直接傳送到了ls命令而不是送到實(shí)際的命令行 解決這一問(wèn)題的辦法是將cmd串弄成一個(gè)字符串?dāng)?shù)組 并且將你想運(yùn)行的程序傳送到命令shell 因此 將cmd行改成下面的樣子 String[] cmd = { sh c ls FILE }; 你將得到一個(gè)名為FILE的文件 里面是目錄列表 c參數(shù)是告訴它讀取隨后的字符串 而最后的參數(shù)是你要運(yùn)行的腳本 在這種情況下 管道也運(yùn)行良好 所以你可以把命令改成下面的方式 String[] cmd = { /bin/sh c /bin/ls | grep d FILE }; 這種形式將給你一個(gè)名為FILE的文件 里面是ls條目中包含d的條目 給出sh和ls的全路徑有利于提供你的程序的安全性 雖然使用Runtime exec不是創(chuàng)建獨(dú)立于平臺(tái)的Java的最佳方式 但是有些時(shí)候是必要的 使用這種重定向技術(shù)有助于走出Runtime exec的限制 lishixinzhi/Article/program/Java/hx/201311/25922
其實(shí)做站點(diǎn)開(kāi)發(fā)的很少使用java的,像Apache等可以直接配置301跳轉(zhuǎn),可是tomcat只是一個(gè)servlet容器,沒(méi)辦法我只能使用過(guò)濾器來(lái)實(shí)現(xiàn)301跳轉(zhuǎn),下面把代碼分享給大家。
import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class URLFilter implements Filter {
@Override
public void destroy() {
// TODO Auto-generated method stub
}
@Override
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
final HttpServletRequest req = (HttpServletRequest) request;
final HttpServletResponse res=(HttpServletResponse)response;
String requestPage = req.getRequestURI();
String queryString = (req.getQueryString() == null ? "" : "?"+req.getQueryString());
if(req.getRequestURL().indexOf("") =0){
res.setStatus(301);
res.setHeader( "Location", ""+requestPage+queryString);
res.setHeader( "Connection", "close" );
}
chain.doFilter(request, response);
}
@Override
public void init(FilterConfig arg0) throws ServletException {
// TODO Auto-generated method stub
}
文章題目:java重定向的代碼 javaweb重定向代碼
本文鏈接:http://chinadenli.net/article10/dogeddo.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供用戶體驗(yàn)、移動(dòng)網(wǎng)站建設(shè)、網(wǎng)站建設(shè)、、網(wǎng)站策劃、企業(yè)網(wǎng)站制作
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)