查看文件源代码功能实现

原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。http://dba10g.blog.51cto.com/764602/855193

我们经常遇到,查看文件源代码的功能。Struts 自带的例子是这样的。

 

其中思路是这样的:将文件流转换为List 输出出来。

用到了

第一种:读取Class

InputStream in = getClass().getResourceAsStream(className);

第二种:一般文件

InputStream in = ClassLoaderUtil.getResourceAsStream(page.substring(indexOf+1), getClass()); 

//or 

    in = servletContext.getResourceAsStream(page);

 

第三种:配置文件

new URL(config).openStream()

 

 

/* 
* $Id: ViewSourceAction.java 570518 2007-08-28 18:26:48Z jholmes $ 

* Licensed to the Apache Software Foundation (ASF) under one 
* or more contributor license agreements.    See the NOTICE file 
* distributed with this work for additional information 
* regarding copyright ownership.    The ASF licenses this file 
* to you under the Apache License, Version 2.0 (the 
* "License"); you may not use this file except in compliance 
* with the License.    You may obtain a copy of the License at 

*    http://www.apache.org/licenses/LICENSE-2.0 

* Unless required by applicable law or agreed to in writing, 
* software distributed under the License is distributed on an 
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 
* KIND, either express or implied.    See the License for the 
* specific language governing permissions and limitations 
* under the License. 
*/ 
package org.apache.struts2.showcase.source; 

import java.io.BufferedReader; 
import java.io.IOException; 
import java.io.InputStream; 
import java.io.InputStreamReader; 
import java.net.MalformedURLException; 
import java.net.URL; 
import java.util.ArrayList; 
import java.util.List; 

import javax.servlet.ServletContext; 
import javax.servlet.http.HttpServletRequest; 

import org.apache.struts2.ServletActionContext; 
import org.apache.struts2.util.ServletContextAware; 

import com.opensymphony.xwork2.ActionSupport; 
import com.opensymphony.xwork2.util.ClassLoaderUtil; 

/** 
* Processes configuration, page, and action class paths to create snippets 
* of the files for display. 
*/ 
public class ViewSourceAction extends ActionSupport implements ServletContextAware { 

        private String page; 
        private String className; 
        private String config; 

        /** 
         * 数据行列表 
         */ 
        private List pageLines; 
        private List classLines; 
        private List configLines; 

        private int configLine; 
        private int padding = 10; 

        private ServletContext servletContext; 

        public String execute() throws MalformedURLException, IOException { 

                if (page != null && page.trim().length() > 0) { 

                        int indexOf = page.indexOf("//"); 
      InputStream in = ClassLoaderUtil.getResourceAsStream(page.substring(indexOf+1), getClass()); 
                        page = page.replace("//", "/"); 

                        if (in == null) { 
                                in = servletContext.getResourceAsStream(page); 
                                while (in == null && page.indexOf('/', 1) > 0) { 
                                        page = page.substring(page.indexOf('/', 1)); 
                                        in = servletContext.getResourceAsStream(page); 
                                } 
                        } 
                        pageLines = read(in, -1); 

                        if (in != null) { 
                                in.close(); 
                        } 
                } 

                if (className != null && className.trim().length() > 0) { 
                        className = "/"+className.replace('.', '/') + ".java"; 
                        InputStream in = getClass().getResourceAsStream(className); 
                        if (in == null) { 
                                in = servletContext.getResourceAsStream("/WEB-INF/src"+className); 
                        } 
                        classLines = read(in, -1); 

                        if (in != null) { 
                                in.close(); 
                        } 
                } 

                String rootPath = ServletActionContext.getServletContext().getRealPath("/"); 
                                 
                if (config != null && config.trim().length() > 0 && (rootPath == null || config.startsWith(rootPath))) { 
                        int pos = config.lastIndexOf(':'); 
                        configLine = Integer.parseInt(config.substring(pos+1)); 
                        config = config.substring(0, pos).replace("//", "/"); 
                        configLines = read(new URL(config).openStream(), configLine); 
                } 
                return SUCCESS; 
        } 

        /** 
         * @param className the className to set 
         */ 
        public void setClassName(String className) { 
                this.className = className; 
        } 

        /** 
         * @param config the config to set 
         */ 
        public void setConfig(String config) { 
                this.config = config; 
        } 

        /** 
         * @param page the page to set 
         */ 
        public void setPage(String page) { 
                this.page = page; 
        } 

        /** 
         * @param padding the padding to set 
         */ 
        public void setPadding(int padding) { 
                this.padding = padding; 
        } 

        /** 
         * @return the classLines 
         */ 
        public List getClassLines() { 
                return classLines; 
        } 

        /** 
         * @return the configLines 
         */ 
        public List getConfigLines() { 
                return configLines; 
        } 

        /** 
         * @return the pageLines 
         */ 
        public List getPageLines() { 
                return pageLines; 
        } 

        /** 
         * @return the className 
         */ 
        public String getClassName() { 
                return className; 
        } 

        /** 
         * @return the config 
         */ 
        public String getConfig() { 
                return config; 
        } 

        /** 
         * @return the page 
         */ 
        public String getPage() { 
                return page; 
        } 

        /** 
         * @return the configLine 
         */ 
        public int getConfigLine() { 
                return configLine; 
        } 

        /** 
         * @return the padding 
         */ 
        public int getPadding() { 
                return padding; 
        } 

        /** 
         * Reads in a strea, optionally only including the target line number 
         * and its padding 
         * 
         * @param in The input stream 
         * @param targetLineNumber The target line number, negative to read all 
         * @return A list of lines 
         */ 
        private List read(InputStream in, int targetLineNumber) { 
                List snippet = null; 
                if (in != null) { 
                        snippet = new ArrayList(); 
                        int startLine = 0; 
                        int endLine = Integer.MAX_VALUE; 
                        if (targetLineNumber > 0) { 
                                startLine = targetLineNumber - padding; 
                                endLine = targetLineNumber + padding; 
                        } 
                        try { 
                                BufferedReader reader = new BufferedReader(new InputStreamReader(in)); 

                                int lineno = 0; 
                                String line; 
                                while ((line = reader.readLine()) != null) { 
                                        lineno++; 
                                        if (lineno >= startLine && lineno <= endLine) { 
                                                snippet.add(line); 
                                        } 
                                } 
                        } catch (Exception ex) { 
                                // ignoring as snippet not available isn't a big deal 
                        } 
                } 
                return snippet; 
        } 

        public void setServletContext(ServletContext arg0) { 
                this.servletContext = arg0; 
        } 

 

本文出自 “简单” 博客,请务必保留此出处http://dba10g.blog.51cto.com/764602/855193

时间: 2024-09-14 21:24:55

查看文件源代码功能实现的相关文章

bin 文件代码-怎么查看 bin 文件源代码

问题描述 怎么查看 bin 文件源代码 请问各位大神,怎么看以 bin为后缀名的文件的源代码呀,谢谢 还有,有什么软件可以对其进行源代码的修改 解决方案 以前我也遇到过这个问题.这是一种镜像文件,用虚拟光驱打开,比如:Daemon Tools. 装上虚光驱后,在我的电脑里会出现一个新的虚拟光驱盘(一般为I盘或者其它符号),然后在任务栏的右边会出现一个红色的虚拟光驱图标,单击它,弹出列表后选择"驱动器"栏,弹出对话框后,打开需要解出的文件(*.xue文件),再到虚拟光驱盘双击打开,就可以

ASP.NET MVC4之js css文件合并功能(3)_实用技巧

MVC4增加了一些新功能,接下来,我们来研究下MVC4中的新增功能,我们在新建一个MVC4项目的时候,会发现在项目下多出了一个App_Start文件夹,文件夹下面有4个文件,BundleConfig.cs,FilterConfig.cs,RouteConfig.cs,WebApiConfig.cs,其中BundleConfig.cs文件就是我们这一节要讲的的文件. 众所周知,浏览器在向服务器发送请求的时候,请求的文件连接数量是有限制的.使用BundleConfig可以将多个文件请求和并成一个请求

php查看网页源代码的方法

 这篇文章主要介绍了php查看网页源代码的方法,涉及php读取网页文件的技巧,具有一定参考借鉴价值,需要的朋友可以参考下     本文实例讲述了php查看网页源代码的方法.分享给大家供大家参考.具体实现方法如下: ? 1 2 3 4 5 6 7 8 9 <?php $url = "http://www.jb51.net"; $fp = @fopen($url, 'r') or die("Cannot Open $url via Get method"); wh

Oracle控制文件的功能和特点

1.控制文件的功能和特点 1)定义数据库当前物理状态 2)维护数据的一致性:如果控制文件中的检查点与数据文件中的一 致,则说明数据一致,可以启动到open状态) 查看数据一致性的方法: SQL> select file#,checkpoint_change# from v$datafile;[从控制文件读取] FILE# CHECKPOINT_CHANGE# ---------- ------------------ 1             172373 2             1723

Win7用Aero Flip 3D查看文件

  微软开发Vista系统时引入了Aero Flip 3D,使用 Windows Flip 3D,可以快速预览所有打开的窗口(例如,打开的文件.文件夹和文档)而无须单击任务栏. Flip 3D 在一个"堆栈"中显示打开的窗口.在堆栈顶部,将看到一个打开的窗口.若要查看其他窗口,可以浏览堆栈.而Windows 7系统依然沿用了这个功能(家庭普通版不支持). 而启动Flip 3D,只需按下Windows+Tab组合热键,还可以通过该组合键来旋转堆栈;Flip 3D可以帮助你将文件组合排队.

阿里云邮箱如何查看文件夹的详细内容

  如果要查看文件夹的内容, 您可以直接单击阿里云邮箱页面左侧导航栏上"文件夹"旁的"管理文件夹"(小扳手符号),在接下来的页面中,您可以看到所有文件夹名称.占用空间.以及各文件夹内总邮件未读邮件的信件数量. 当您在查看文件夹的内容时,请点击该文件夹名称的链接,文件夹中信件将自动按照发送时间降序排列. 如果您想将信件作分类整理,请按以下步骤操作: 1.如果您想把文件夹中信件改为按照邮件的发送日期升序排列,请点击"时间" 链接,此时"时间

菜鸟学Linux命令:cat命令 查看文件内容

cat命令的用途是连接文件或标准输入并打印. 这个命令常用来显示文件内容,或者将几个文件连接起来显示,或者从标准输入读取内容并显示,它常与重定向符号配合使用. Linux下查看文件内容的方式很多:vi 文件名 #编辑方式查看,可修改cat 文件名 #显示全部文件内容more 文件名 #分页显示文件内容tail 文件名 #仅查看尾部,还可以指定行数head 文件名 #仅查看头部,还可以指定行数sed '1,$'p 文件名 #可以指定起始行和结束行的 cat的主要功能: 1.一次显示整个文件:cat

Android编程实现文件浏览功能的方法【类似于FileDialog的功能】_Android

本文实例讲述了Android编程实现文件浏览功能的方法.分享给大家供大家参考,具体如下: 最近正在弄上传文件,当时想怎么能实现fileDialog的功能呢,打开文件,浏览文件,然后选择文件呢,查了好多资料,也看了不少论坛,都说里面没有这个功能,那真是奇怪了,里面没有这个功能,当然就需要自己动手添加这个功能了. 首先说一下这个文件浏览的简单实现原理: 首先选择一个目录做为根目录,然后打开此目录,常用的就是使用File这个类了,如下: File file=new File(path); 然后可以通过

CI框架源码解读之利用Hook.php文件完成功能扩展的方法_php实例

本文实例讲述了CI框架源码解读之利用Hook.php文件完成功能扩展的方法.分享给大家供大家参考,具体如下: 看了hook.php的源码,就知道CI使用hook来进行扩展的原理了. hook的基本知识 http://codeigniter.org.cn/user_guide/general/hooks.html CI中hook的使用经历了一个:开启hook,定义hook,调用hook,执行hook的过程. 手册中已经告知了开启.定义.调用的方法.那么hook的实现原理是啥呢. <?php if