标签 工具 下的文章 - 酷游博客
首页
关于
友链
Search
1
阿里的简历多久可以投递一次?次数多了有没有影响?可以同时进行吗?
45 阅读
2
Java中泛型的理解
40 阅读
3
Java 14 发布了,再也不怕 NullPointerException 了!
38 阅读
4
Java中的可变参数
37 阅读
5
该如何创建字符串,使用" "还是构造函数?
30 阅读
技术
登录
/
注册
找到
7
篇与
工具
相关的结果
2025-01-22
Eclipse的Debug介绍与技巧
写在前面:由于最近手上项目新接入了两个中间件,在接入过程中遇到了很多问题,大部分问题都是由身边同事以及中间件的开发者帮忙解决的,在他们解决的过程中学习到了很多关于debug的技巧。同时结合网上的一些介绍,总结出关于Eclipse的Debug的相关知识。 没有任何程序员能够一气呵成的写出没有任何BUG的代码,所以很多程序员有相当一部分时间是花费在Debug上的,程序调试是每个程序员必须面对的工作,如何使用Eclipse进行有效的、尤其是高效的进行代码调试是一个值得学习的技巧。 一、Eclipse调试介绍 二、Eclipse中和Debug相关的视图 2.1 Debug View 2.2 Variables View 2.3 Breakpoints View 2.4 Expressions View 2.5 Display View 三、Debug 3.1 设置断点 3.2 调试程序 3.2.1 调试本地 Java 语言程序 3.3.2 远程调试 一、Eclipse调试介绍 使用过Eclipse的人都知道,Eclipse都是自带Java调试器的,可以提供很多基本的调试功能。 Eclipse 平台工作台及其工具是围绕 JDT 组件构建的,该组件为 Eclipse 提供了下列特性: 项目管理工具 透视图和视图 构造器、编辑器、搜索和构建功能 调试器 二、Eclipse中和Debug相关的视图 图 1. Eclipse Debug 透视图的一般视图(该视图可以在Eclipse界面的右上角位置点击Debug按钮进入) Debug View: Debug视图允许您在工作台上管理正在调试和运行的程序,他显示了你正在调试的程序中挂起的线程的堆栈帧,程序中的每个线程作为树的节点出现。他展示了正在运行的每个目标的进程。如果线程被挂起,它的堆栈帧以子元素的形式展示。以下是一些常用的debug按钮: Skip All Breakpoints::将所有断点设置为被跳过的,设置了Skip All Breakpoints之后,所有断点上都会有一个斜线,表示断点将被跳过,线程不会在该断点处被挂起。 Drop to Frame:这个命令可以让程序回到当前方法的开头第一行重新开始执行,可以重新执行这个java堆栈帧,可以选择一个指定的堆栈帧,然后点击 Drop to Frame,这样就可以重新进入指定的堆栈帧。使用Drop to Frame时候需要注意: 1.不能drop到已经执行过的方法栈中的方法中。 2.drop到stack frame中时,不会改变全局数据原有的值,比如,一个包含元素的vertor并不会被清空。 Step Filters:这个功能比较简单,就是当我们在debug的时候想要忽略一些我们不关注的类时,可以开启Step Filters进行过滤,程序会一直执行直到遇到未经过滤的位置或断点。Step Filters功能由Use Step Filters,Edit Step Filters,Filter Type,Filter Package四项组成。具体操作如下: 步骤 1: Windows -> Preferences -> Java -> Debug -> Step Filtering. 步骤 2:选择‘Use Step Filters’. 步骤 3:在屏幕上选中所需的选项。你可以添加你自己代码库中的部分代码。 步骤 4:点击‘Apply’. 原理上,Edit Step Filter命令用于配置Step Filter规则,而Filter Type与Filter Package分别指的是过滤的Java类型与Java Package。 Step Return:跳出当前方法,在被调用方法的执行过程中,使用Step Return会在执行完当前方法的全部代码后跳出该方法返回到调用该方法的方法中。 Step Over:在单步执行时,在函数内遇到子函数时不会进入子函数内单步执行,而是将子函数整个执行完在停止,也就是把子函数整个作为一步。 Step Into:单步执行,遇到子函数就进入并且继续单步执行 Resume:恢复暂停的线程,直接从当前位置跳到下一个断点位置。 Suspend:暂停选定的线程,这个时候可以进行浏览或者修改代码,检查数据等。 Eclipse通过Suspend与Resume来支持线程的暂挂与恢复。一般来讲,Suspend适用于多线程程序的调试,当需要查看某一个线程的堆栈帧及变量值时,我们可以通过Suspend命令将该线程暂挂。Resume用于恢复。有两种Resume需要注意:第一是当在调试过程中修改程序代码,然后保存,点击Resume,此时程序会暂挂于断点。第二是当程序抛出异常时,运行Resume,程序也会暂挂于断点。 Terminate:Eclipse通过Terminate命令终止对本地程序的调试。 Disconnect:Eclipse使用Disconnect命令来终止与远程JVM的socket连接。 Variables View : Variables View显示与Debug View中选定的堆栈帧相关的变量信息,调试Java程序时,变量可以选择将更详细的信息显示在详细信息窗格中。此外,Java对象还可以显示出其包含的属性的值。在该窗口中选中变量鼠标右键点击可以进行许多操作,主要操作有以下这些: All Instances:打开一个对话框来显示该java类的所有实例,使用该功能需要java虚拟机支持实例的检索。 All References::打开一个对话框来显示所有引用了该变量的java对象, Change Value::更改变量的值,该功能可以和Drop to Frame联合使用进行程序的调试。使用这两个功能就可以代替重新debug Copy Variables:复制变量的值,尤其在变量值很长(比如json数据)的时候,这个功能就派上用场了。 Find:有的时候一个类中变量特别多的时候,可以进行查找。 Breakpoints View : Breakpoints View将列出你在当前工作区间里设置的所有断点,双击断点可以进入到程序中该断点的位置。还可以启用或禁用断点,删除,添加新的,根据工作组或点命中计数给他们分组。在使用断点是有以下两个技巧是十分有用的: Hit Count: 是指定断点处的代码段运行多少次,最典型的就是循环,如果要让一个循环执行10次就线程挂起,则指定Hit Count值为10,那么当前的循环执行到第九次的时候就会挂掉。 Conditional:顾名思义,就是条件判断,例如我们需要循环变量i==10时,线程挂起,则条件设定为i==10,选择Suspend when “true”。 那如果上面的Hit Count和Conditional都选择的话,如果表达式和值设置不合理则会实效。如果选择Suspend when value changes,那么可能在Conditional在变量值发生改变的时候就挂起。 Expressions View : 要在 Debug 透视图的编辑器中求表达式的值,选中设置有断点的一整行,并在上下文菜单中选择 Inspect 选项。表达式是在当前堆栈帧的上下文中求值的,其结果显示在 Display 窗口的 Expressions 视图中。 比如我想要计算变量a+b的值,那么就可以在表达式视图中加一个表达式:a+b Display View : 可以使用这个视图,输入或者演算一些新的代码。这些代码在当前的调试位置的上下文环境中被执行,这意味着,你可以使用所有变量甚至是内容助手。要执行你的代码的话,只需标记它,并使用右键菜单或者CTRL+U(执行)或者 CTRL+SHIFT+I (检查). 三、Debug 设置断点 在源代码文件中,在想要设置断点的代码行的前面的标记行处,双击鼠标左键就可以设置断点,在相同位置再次双击即可取消断点。有的时候我们还有这样的需要,就是我并不想一行一行的执行代码,比如一个for循环会循环1000多遍,我只想在第500遍的时候让线程挂起进行调试,这个时候我们可以使用条件断点。 设置条件断点:我们可以给该断点设置触发条件,一旦满足某条件是才开始调试,可以在断点处点击鼠标右键,选择Breakpoint Properties进入断点设置页面,刚刚在讲断点视图的时候我们学到过Hit Count和Conditional的用法,这里可以设置条件和执行次数。 调试程序 1、调试本地 Java 语言程序 在所有调试中,调试一个Java程序是最简单的,主要有设置断点、启动调试、单步执行、结束调试几步。 设置断点:前面已经说过。 启动调试:Eclipse提供四种方式来启动程序(Launch)的调试,分别是通过菜单(Run –> Debug)、图标(“绿色臭虫”)、右键->Debug As以及快捷键(F11),在这一点上,与其他命令(例如Run)类似。 单步执行:主要使用前面讲过的几个视图进行调试,其中debug视图中的几个按钮有快捷键: Step Retuen(F7) Step Over (F6) Step Into (F5) 结束调试:通过Terminate命令终止对本地程序的调试。 2、远程调试 远程调试主要用于调试非本地Java程序,这里的非本地并不是只在其他人的机器上才叫非本地。运行在本机上的Web服务器上的程序在调试时也需要使用远程调试。远程调试的大致步骤和调试本地Java语言程序基本一直,只是在设置上有些不同。 Eclipse 调试器可以调试远程应用程序。它可以连接到一个运行 Java 应用程序的远程 VM,将自己连接到该应用程序上去。使用远程调试会话与使用本地调试会话大致相同。但是,远程调试配置需要在 Run > Debug 窗口中配置一些不同的设置。需要在左侧视图中先选择 Remote Java Application 选项,然后单击 New。这样就创建了一个新的远程启动配置,会显示出三个选项卡:Connect、Source 和 Common。 在 Connect 选项卡的 Project 字段,选择在启动搜索源代码时要引用的项目。在 Connect 选项卡的 Host 字段,输入运行 Java 程序的远程主机的 IP 地址或域名。在 Connect 选项卡的 Port 字段,输入远程 VM 接收连接的端口。通常,该端口在启动远程 VM 时指定。如果想让调试器决定在远程会话中 Terminate 命令是否可用,可以选择 Allow termination of remote VM 选项。如果希望可以终止连接的 VM,则选择该选项。现在,在选择 Debug 选项时,调试器会尝试连接到指定地址或端口的远程 VM,结果会在 Debug 视图中显示出来。 参考资料: Eclipse Help : http://help.eclipse.org/luna/index.jsp 使用 Eclipse 平台进行调试 : http://www.ibm.com/developerworks/cn/opensource/os-ecbug/ 使用 Eclipse 远程调试 Java 应用程序 : http://www.ibm.com/developerworks/cn/opensource/os-eclipse-javadebug/ 使用Eclipse调试Java程序的10个技巧 : http://developer.51cto.com/art/201304/388155_all.htm Eclipse 调试器:零距离接触实战技巧 : http://hb.qq.com/a/20111125/000136.htm
技术
# 工具
酷游
1月22日
0
6
0
2025-01-22
Pandoc——markdown的好基友
Markdown 是一种轻量级标记语言。它允许人们“使用易读易写的纯文本格式编写文档,然后转换成有效的XHTML(或者HTML)文档”。这种语言吸收了很多在电子邮件中已有的纯文本标记的特性。由于其编写方便,并且支持代码高亮等功能,尤其受到开发人员的青睐。渐渐成为开发人员写文章、博客等的必备工具。 我相信大部分开发人员在写个人博客或者技术文章的时候都跟我一样: 在电脑上使用macdown、mou等软件中使用Markdown语法写内容,然后将写好的文章内容粘贴到支持markdown语法的个人网站中。 但是,除了可以在支持markdown语法的地方可以正常显示之外,在其他任何地方,使用markdown格式写出来的内容的可读性都比较低。今天,给大家推荐一款神器——Pandoc Pandoc是由John MacFarlane开发的标记语言转换工具,可实现不同标记语言间的格式转换,堪称该领域中的“瑞士军刀”。Pandoc使用Haskell语言编写,以命令行形式实现与用户的交互,可支持多种操作系统;Pandoc采用GNU GPL授权协议发布,属于自由软件。 Pandoc的功能 pandoc可以在以下格式中任意转换: Pandoc的安装 Pandoc提供以下安装方式(如果需要输出PDF文档,则除Pandoc本身以外,还应另外安装LaTeX套件): Windows及Mac OS X 下载安装包并执行安装程序。 Linux 尝试使用Linux发行版的软件管理工具安装,目前Pandoc已加入Debian、Ubuntu、Slackware、Arch、Fedora、NiXOS和gentoo的软件仓库。如果无法通过软件管理工具直接安装Pandoc,则可采取下面介绍的全平台安装方式,即首先安装Haskell平台,再在其基础上安装Pandoc。绝大多数Linux发行版的软件仓库中都包含Haskell平台。 BSD FreeBSD和NetBSD的软件仓库中已包含Pandoc,可直接安装。 全平台 首先安装Haskell平台,之后使用cabal工具安装最新版本的Pandoc: cabal update cabal install pandoc Pandoc的使用 Pandoc的基本指令格式是: pandoc [options] [input-file] ... 简单的格式转换指令: pandoc -o output.html input.md 其中-o ouput.html表示输出文件为output.html,input.md是输入文件。 Pandoc会根据文件的后缀名自动判断格式,用户也可以显式地指定输入文件和输出文件格式: pandoc -f markdown -t html -o output.html input.md 其中-f markdown表示输入文件格式为Markdown,-t html表示输出文件格式为HTML。 常用命令 Markdown转html pandoc README.md -o README.html Markdown转word pandoc README.md -o README.docx Markdown转word 首先安装安装LaTex pandoc README.md --latex-engine=xelatex -o README.pdf Markdown转在线PPT 一、采用默认模板渲染一个独立的DZSlides幻灯片: pandoc README.md -o README.html -t dzslides -s 二、使用带样式的模板 首先需要从GitHub上获取https://github.com/hakimel/reveal.js git clone https://github.com/hakimel/reveal.js 渲染幻灯片: pandoc slides.md -o slides.html -t revealjs -s 除了默认的外观主题以外,reveal.js还提供了多个主题可供选择, pandoc README.md -o README.html -t revealjs -s -V theme=beige default:(默认)深灰色背景,白色文字 beige:米色背景,深色文字 sky:天蓝色背景,白色细文字 night:黑色背景,白色粗文字 serif:浅色背景,灰色衬线文字 simple:白色背景,黑色文字 solarized:奶油色背景,深青色文字 更多其他用法 访问Pandoc官网查看更多Demo
技术
# 工具
酷游
1月22日
0
12
0
2025-01-22
记一次删除Git记录中的大文件的过程
最近在开发一个新应用,有一天在gitlab上clone代码的时候发现我的应用竟然有170+M,明明是一个全新的应用,代码都没有几行呢,为什么会有这么大呢? 后来经过了解Git的原理,解决了这个问题,把相关内容记录下来。分享一下。 Why 我的一个新应用竟然要170+M,这是打死我我也不会信的,于是就开始分析为什么会这么大。 step 1. 把代码拉到本地 git clone git@github.com:hollischuang/Architecture-Evolution.git 只是用这个地址举例,实际并不是这个项目。 step 2. 查看哪个文件占用的空间比较大 $cd Architecture-Evolution $du -d 1 -h 174M ./.git 264K ./test 96K . 于是,发现是.git目录自己就占用了174M,了解Git的人都知道,.git目录是git自己生成的,记录了git仓库的相关信息的。看到这里其实并不难知道原因。 Git 维护着一个微型的文件系统,其中的文件也被称作数据对象。所有的数据对象均存储于项目下面的 .git/objects中。 经过我的验证,确实是.git/objects这个文件夹中的文件占了磁盘上174M的空间。 也就是说,只要我有一次将一个大文件误提交了,那么即使我后面把它删除了,但是,实际上在.git中,这个文件还是存在的,虽然我们可能再也不需要他了,但是他还在那里默默的存在着。。。 Git与大部分版本控制系统的差别是很大的,比如Subversion、CVS、Perforce、Mercurial 等等,使用的是“增量文件系统” (Delta Storage systems), 就是说它们存储每次提交(commit)之间的差异。Git正好与之相反,它会把你的每次提交的文件的全部内容(snapshot)都会记录下来。这会是在使用Git时的一个很重要的理念。 也就是说,如果我又一次把一个大文件务提交到git仓库中了,那么,下次提交时,即使你只改动了某个文件的一行内容,Git 也会生成一个全新的对象来存储新的文件内容。 因为以上两个特性,我回想起我的一次手残行为:刚刚创建一个应用之后,我快速的写完代码,编译,运行,发现没啥问题之后,我准备先把他发布掉,于是我开始创建git仓库,并尝试把代码提交上去,这时我并没有创建.gitignore文件,我直接git add . git commit -m 'init' git push一气呵成的执行了熟悉的操作。 相信聪明的人已经发现了,逗比啊,我在编译代码之后,会有很多jar被我down到target目录下。我直接git add.把target下面的jar包,war包等这些也直接提交了。。。虽然后面我意识到,并且删除了这些文件,然后再次提交,但是由于刚我们说过的原因,这些文件依然占用着我的空间。。。 更多关于git的原理内容参见:Git 内部原理 How 问题已经定位到了,接下来就是要解决问题了。如果对git的原理及命令了解的比较多的话,这个问题还是比较好解决的,由于当时博主并不十分了解git的原理,所以做了一些知识储备之后才开始动手的。(Git 之术与道 — 对象、为什么你的 Git 仓库变得如此臃肿) Step 1 查看哪些历史提交过文件占用空间较大 使用以下命令可以查看占用空间最多的五个文件: git rev-list --objects --all | grep "$(git verify-pack -v .git/objects/pack/*.idx | sort -k 3 -n | tail -5 | awk '{print$1}')" rev-list命令用来列出Git仓库中的提交,我们用它来列出所有提交中涉及的文件名及其ID。 该命令可以指定只显示某个引用(或分支)的上下游的提交。 --objects:列出该提交涉及的所有文件ID。 --all:所有分支的提交,相当于指定了位于/refs下的所有引用。 verify-pack命令用于显示已打包的内容。 step 2. 重写commit,删除大文件 使用以下命令,删除历史提交过的大文件: git filter-branch --force --index-filter 'git rm -rf --cached --ignore-unmatch big-file.jar' --prune-empty --tag-name-filter cat -- --all 上面脚本中的big-file.jar请换成你第一步查出的大文件名,或者这里直接写一个目录。 filter-branch命令可以用来重写Git仓库中的提交 --index-filter参数用来指定一条Bash命令,然后Git会检出(checkout)所有的提交, 执行该命令,然后重新提交。 –all参数表示我们需要重写所有分支(或引用)。 在重写提交的过程中,会有以下日志输出: Rewrite 6cdbb293d453ced07e6a07e0aa6e580e6a5538f4 (266/266) # Ref 'refs/heads/master' was rewritten 如果显示 xxxxx unchanged, 说明repo里没有找到该文件, 请检查路径和文件名是否正确,重复上面的脚本,把所有你想删除的文件都删掉。 step 3. 推送修改后的repo 以强制覆盖的方式推送你的repo, 命令如下: git push origin master --force step 4. 清理和回收空间 虽然上面我们已经删除了文件, 但是我们的repo里面仍然保留了这些objects, 等待垃圾回收(GC), 所以我们要用命令彻底清除它, 并收回空间,命令如下: rm -rf .git/refs/original/ git reflog expire --expire=now --all git gc --prune=now 至此,我们已经彻底的删除了我们不想要的文件。 参考资料 Git 内部原理 Git 之术与道 — 对象 为什么你的 Git 仓库变得如此臃肿 Git如何永久删除文件(包括历史记录)
技术
# 工具
酷游
1月22日
0
8
0
2025-01-22
一行命令同时修改maven项目中多个mudule的版本号
Maven,是一个Java开发比较常用的项目管理工具,可以对 Java 项目进行构建、依赖管理。 对于很多Java程序员来说,分层架构都是不陌生的,至少MVC三层架构都是不陌生的,甚至有人说:”Any problem in computer science can be solved by anther layer of indirection.” 想要在代码中进行分层,比较好的做法就是创建多module的项目 maven-parent (Maven Project) |- maven-dao (Maven Module) |- pom.xml |- maven-service (Maven Module) |- pom.xml |- maven-view (Maven Module) |- pom.xml |- pom.xml 以上项目,主要有三个模块,一般通过Maven进行模块间关系的管理。如: 最外层的pom.xml中,定义以下内容: 4.0.0 hollis-test com.hollis.lab test pom 1.0.0 maven-dao maven-service maven-view 然后在每个子模块中定义以下内容: 4.0.0 hollis-test com.hollis.lab 1.0.0 maven-service com.hollis.lab jar 这样,就形成了一个父子模块的关系。 但是,这样的项目,在版本升级的时候就会比较麻烦,因为要遍历的修改所有pom中的版本号。比 如要把1.0.0升级到1.0.1,那么就需要把所有的pom中的version都改掉。 这个人肉修改的过程既繁琐又容易出错,那么有没有什么办法可以代替人肉修改呢? 答案是有的。 一行命令修改所有版本号 maven之所以强大,是因为他有一个牛X的插件机制。我们可以借助一个插件来实现这个功能。 这个插件就是versions-maven-plugin。使用方法也很简单,就是在最外层的pom文件中,增加以下插件配置: org.codehaus.mojo versions-maven-plugin 2.7 false generateBackupPoms用于配置是否生成备份Pom,用于版本回滚。 配置好插件后,执行命令 mvn versions:set -DnewVersion=1.0.1 即可降以上例子中的所有版本号修改成1.0.1。 为了方便使用,还可以在linux上设置别名,如: alias mvs='mvs() { mvn versions:set -DnewVersion=$1 }; mvs' 即可使用mvs命令一键修改版本号。
技术
# 工具
酷游
1月22日
0
14
0
2025-01-22
poi的使用以及简单介绍
最近在做项目的过程中需要将页面信息转换成excel表格输出,在多方面选择之下,最后使用了开源框架poi,使用过程中遇到过一些问题和总结了一些经验,记录下来,方便日后查阅。 一、导入jar包 要使用一个框架,首先要导入相应的jar包,poi的jar包去网上搜索就可以了,因为本人是使用Maven构建的项目,所以将pom文件中的引用贴出: org.apache.poi poi 3.9 导入jar包之后,便可以在程序中使用poi了 二、简单使用 首先我们看几个简单使用poi的例子,然后从例子中解析使用poi需要用到的类与对象: 1.创建工作簿 (WORKBOOK) HSSFWorkbook wb = new HSSFWorkbook(); FileOutputStream fileOut = new FileOutputStream("workbook.xls"); wb.write(fileOut); fileOut.close(); 2.创建工作表(SHEET) HSSFWorkbook wb = new HSSFWorkbook(); HSSFSheet sheet1 = wb.createSheet("new sheet"); HSSFSheet sheet2 = wb.createSheet("second sheet"); FileOutputStream fileOut = new FileOutputStream("workbook.xls"); wb.write(fileOut); fileOut.close(); 3.创建单元格(CELL) HSSFWorkbook wb = new HSSFWorkbook(); HSSFSheet sheet = wb.createSheet("new sheet"); // Create a row and put some cells in it. Rows are 0 based. HSSFRow row = sheet.createRow((short)0); // Create a cell and put a value in it. HSSFCell cell = row.createCell((short)0); cell.setCellValue(1); // Or do it on one line. row.createCell((short)1).setCellValue(1.2); row.createCell((short)2).setCellValue("This is a string"); row.createCell((short)3).setCellValue(true); // Write the output to a file FileOutputStream fileOut = new FileOutputStream("workbook.xls"); wb.write(fileOut); fileOut.close(); 4.创建指定单元格式的单元格 HSSFWorkbook wb = new HSSFWorkbook(); HSSFSheet sheet = wb.createSheet("new sheet"); // Create a row and put some cells in it. Rows are 0 based. HSSFRow row = sheet.createRow((short)0); // Create a cell and put a date value in it. The first cell is not styled // as a date. HSSFCell cell = row.createCell((short)0); cell.setCellValue(new Date()); // we style the second cell as a date (and time). It is important to // create a new cell style from the workbook otherwise you can end up // modifying the built in style and effecting not only this cell but other cells. HSSFCellStyle cellStyle = wb.createCellStyle(); cellStyle.setDataFormat(HSSFDataFormat.getBuiltinFormat("m/d/yy h:mm")); cell = row.createCell((short)1); cell.setCellValue(new Date()); cell.setCellStyle(cellStyle); // Write the output to a file FileOutputStream fileOut = new FileOutputStream("workbook.xls"); wb.write(fileOut); fileOut.close(); 5. 单元格的不同格式 HSSFWorkbook wb = new HSSFWorkbook(); HSSFSheet sheet = wb.createSheet("new sheet"); HSSFRow row = sheet.createRow((short)2); row.createCell((short) 0).setCellValue(1.1); row.createCell((short) 1).setCellValue(new Date()); row.createCell((short) 2).setCellValue("a string"); row.createCell((short) 3).setCellValue(true); row.createCell((short) 4).setCellType(HSSFCell.CELL_TYPE_ERROR); // Write the output to a file FileOutputStream fileOut = new FileOutputStream("workbook.xls"); wb.write(fileOut); fileOut.close(); 6.单元格的不通对齐方式 public static void main(String[] args) throws IOException { HSSFWorkbook wb = new HSSFWorkbook(); HSSFSheet sheet = wb.createSheet("new sheet"); HSSFRow row = sheet.createRow((short) 2); createCell(wb, row, (short) 0, HSSFCellStyle.ALIGN_CENTER); createCell(wb, row, (short) 1, HSSFCellStyle.ALIGN_CENTER_SELECTION); createCell(wb, row, (short) 2, HSSFCellStyle.ALIGN_FILL); createCell(wb, row, (short) 3, HSSFCellStyle.ALIGN_GENERAL); createCell(wb, row, (short) 4, HSSFCellStyle.ALIGN_JUSTIFY); createCell(wb, row, (short) 5, HSSFCellStyle.ALIGN_LEFT); createCell(wb, row, (short) 6, HSSFCellStyle.ALIGN_RIGHT); // Write the output to a file FileOutputStream fileOut = new FileOutputStream("workbook.xls"); wb.write(fileOut); fileOut.close(); } /** * Creates a cell and aligns it a certain way. * * @param wb the workbook * @param row the row to create the cell in * @param column the column number to create the cell in * @param align the alignment for the cell. */ private static void createCell(HSSFWorkbook wb, HSSFRow row, short column, short align) { HSSFCell cell = row.createCell(column); cell.setCellValue("Align It"); HSSFCellStyle cellStyle = wb.createCellStyle(); cellStyle.setAlignment(align); cell.setCellStyle(cellStyle); } 7.单元格的边框设置 Working with borders HSSFWorkbook wb = new HSSFWorkbook(); HSSFSheet sheet = wb.createSheet("new sheet"); // Create a row and put some cells in it. Rows are 0 based. HSSFRow row = sheet.createRow((short) 1); // Create a cell and put a value in it. HSSFCell cell = row.createCell((short) 1); cell.setCellValue(4); // Style the cell with borders all around. HSSFCellStyle style = wb.createCellStyle(); style.setBorderBottom(HSSFCellStyle.BORDER_THIN); style.setBottomBorderColor(HSSFColor.BLACK.index); style.setBorderLeft(HSSFCellStyle.BORDER_THIN); style.setLeftBorderColor(HSSFColor.GREEN.index); style.setBorderRight(HSSFCellStyle.BORDER_THIN); style.setRightBorderColor(HSSFColor.BLUE.index); style.setBorderTop(HSSFCellStyle.BORDER_MEDIUM_DASHED); style.setTopBorderColor(HSSFColor.BLACK.index); cell.setCellStyle(style); // Write the output to a file FileOutputStream fileOut = new FileOutputStream("workbook.xls"); wb.write(fileOut); fileOut.close(); 8.填充和颜色设置 HSSFWorkbook wb = new HSSFWorkbook(); HSSFSheet sheet = wb.createSheet("new sheet"); // Create a row and put some cells in it. Rows are 0 based. HSSFRow row = sheet.createRow((short) 1); // Aqua background HSSFCellStyle style = wb.createCellStyle(); style.setFillBackgroundColor(HSSFColor.AQUA.index); style.setFillPattern(HSSFCellStyle.BIG_SPOTS); HSSFCell cell = row.createCell((short) 1); cell.setCellValue("X"); cell.setCellStyle(style); // Orange "foreground", foreground being the fill foreground not the font color. style = wb.createCellStyle(); style.setFillForegroundColor(HSSFColor.ORANGE.index); style.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND); cell = row.createCell((short) 2); cell.setCellValue("X"); cell.setCellStyle(style); // Write the output to a file FileOutputStream fileOut = new FileOutputStream("workbook.xls"); wb.write(fileOut); fileOut.close(); 9.合并单元格操作 HSSFWorkbook wb = new HSSFWorkbook(); HSSFSheet sheet = wb.createSheet("new sheet"); HSSFRow row = sheet.createRow((short) 1); HSSFCell cell = row.createCell((short) 1); cell.setCellValue("This is a test of merging"); sheet.addMergedRegion(new Region(1,(short)1,1,(short)2)); // Write the output to a file FileOutputStream fileOut = new FileOutputStream("workbook.xls"); wb.write(fileOut); fileOut.close(); 10.字体设置 HSSFWorkbook wb = new HSSFWorkbook(); HSSFSheet sheet = wb.createSheet("new sheet"); // Create a row and put some cells in it. Rows are 0 based. HSSFRow row = sheet.createRow((short) 1); // Create a new font and alter it. HSSFFont font = wb.createFont(); font.setFontHeightInPoints((short)24); font.setFontName("Courier New"); font.setItalic(true); font.setStrikeout(true); // Fonts are set into a style so create a new one to use. HSSFCellStyle style = wb.createCellStyle(); style.setFont(font); // Create a cell and put a value in it. HSSFCell cell = row.createCell((short) 1); cell.setCellValue("This is a test of fonts"); cell.setCellStyle(style); // Write the output to a file FileOutputStream fileOut = new FileOutputStream("workbook.xls"); wb.write(fileOut); fileOut.close(); 11.自定义颜色 HSSFWorkbook wb = new HSSFWorkbook(); HSSFSheet sheet = wb.createSheet(); HSSFRow row = sheet.createRow((short) 0); HSSFCell cell = row.createCell((short) 0); cell.setCellValue("Default Palette"); //apply some colors from the standard palette, // as in the previous examples. //we'll use red text on a lime background HSSFCellStyle style = wb.createCellStyle(); style.setFillForegroundColor(HSSFColor.LIME.index); style.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND); HSSFFont font = wb.createFont(); font.setColor(HSSFColor.RED.index); style.setFont(font); cell.setCellStyle(style); //save with the default palette FileOutputStream out = new FileOutputStream("default_palette.xls"); wb.write(out); out.close(); //now, let's replace RED and LIME in the palette // with a more attractive combination // (lovingly borrowed from freebsd.org) cell.setCellValue("Modified Palette"); //creating a custom palette for the workbook HSSFPalette palette = wb.getCustomPalette(); //replacing the standard red with freebsd.org red palette.setColorAtIndex(HSSFColor.RED.index, (byte) 153, //RGB red (0-255) (byte) 0, //RGB green (byte) 0 //RGB blue ); //replacing lime with freebsd.org gold palette.setColorAtIndex(HSSFColor.LIME.index, (byte) 255, (byte) 204, (byte) 102); //save with the modified palette // note that wherever we have previously used RED or LIME, the // new colors magically appear out = new FileOutputStream("modified_palette.xls"); wb.write(out); out.close(); 12.读和重写EXCEL文件 POIFSFileSystem fs = new POIFSFileSystem(new FileInputStream("workbook.xls")); HSSFWorkbook wb = new HSSFWorkbook(fs); HSSFSheet sheet = wb.getSheetAt(0); HSSFRow row = sheet.getRow(2); HSSFCell cell = row.getCell((short)3); if (cell == null) cell = row.createCell((short)3); cell.setCellType(HSSFCell.CELL_TYPE_STRING); cell.setCellValue("a test"); // Write the output to a file FileOutputStream fileOut = new FileOutputStream("workbook.xls"); wb.write(fileOut); fileOut.close(); 13.在EXCEL单元格中使用自动换行 HSSFWorkbook wb = new HSSFWorkbook(); HSSFSheet s = wb.createSheet(); HSSFRow r = null; HSSFCell c = null; HSSFCellStyle cs = wb.createCellStyle(); HSSFFont f = wb.createFont(); HSSFFont f2 = wb.createFont(); cs = wb.createCellStyle(); cs.setFont( f2 ); //Word Wrap MUST be turned on cs.setWrapText( true ); r = s.createRow( (short) 2 ); r.setHeight( (short) 0x349 ); c = r.createCell( (short) 2 ); c.setCellType( HSSFCell.CELL_TYPE_STRING ); c.setCellValue( "Use /n with word wrap on to create a new line" ); c.setCellStyle( cs ); s.setColumnWidth( (short) 2, (short) ( ( 50 * 8 ) / ( (double) 1 / 20 ) ) ); FileOutputStream fileOut = new FileOutputStream( "workbook.xls" ); wb.write( fileOut ); fileOut.close(); 14.数字格式自定义 HSSFWorkbook wb = new HSSFWorkbook(); HSSFSheet sheet = wb.createSheet("format sheet"); HSSFCellStyle style; HSSFDataFormat format = wb.createDataFormat(); HSSFRow row; HSSFCell cell; short rowNum = 0; short colNum = 0; row = sheet.createRow(rowNum++); cell = row.createCell(colNum); cell.setCellValue(11111.25); style = wb.createCellStyle(); style.setDataFormat(format.getFormat("0.0")); cell.setCellStyle(style); row = sheet.createRow(rowNum++); cell = row.createCell(colNum); cell.setCellValue(11111.25); style = wb.createCellStyle(); style.setDataFormat(format.getFormat("#,##0.0000")); cell.setCellStyle(style); FileOutputStream fileOut = new FileOutputStream("workbook.xls"); wb.write(fileOut); fileOut.close(); 15.调整工作单位置 HSSFWorkbook wb = new HSSFWorkbook(); HSSFSheet sheet = wb.createSheet("format sheet"); HSSFPrintSetup ps = sheet.getPrintSetup(); sheet.setAutobreaks(true); ps.setFitHeight((short)1); ps.setFitWidth((short)1); // Create various cells and rows for spreadsheet. FileOutputStream fileOut = new FileOutputStream("workbook.xls"); wb.write(fileOut); fileOut.close(); 16.设置打印区域 HSSFWorkbook wb = new HSSFWorkbook(); HSSFSheet sheet = wb.createSheet("Sheet1"); wb.setPrintArea(0, "$A$1:$C$2"); //sets the print area for the first sheet //Alternatively: //wb.setPrintArea(0, 0, 1, 0, 0) is equivalent to using the name reference (See the JavaDocs for more details) // Create various cells and rows for spreadsheet. FileOutputStream fileOut = new FileOutputStream("workbook.xls"); wb.write(fileOut); fileOut.close(); 17.标注脚注 HSSFWorkbook wb = new HSSFWorkbook(); HSSFSheet sheet = wb.createSheet("format sheet"); HSSFFooter footer = sheet.getFooter() footer.setRight( "Page " + HSSFFooter.page() + " of " + HSSFFooter.numPages() ); // Create various cells and rows for spreadsheet. FileOutputStream fileOut = new FileOutputStream("workbook.xls"); wb.write(fileOut); fileOut.close(); 18.使用方便的内部提供的函数 HSSFWorkbook wb = new HSSFWorkbook(); HSSFSheet sheet1 = wb.createSheet( "new sheet" ); // Create a merged region HSSFRow row = sheet1.createRow( (short) 1 ); HSSFRow row2 = sheet1.createRow( (short) 2 ); HSSFCell cell = row.createCell( (short) 1 ); cell.setCellValue( "This is a test of merging" ); Region region = new Region( 1, (short) 1, 4, (short) 4 ); sheet1.addMergedRegion( region ); // Set the border and border colors. final short borderMediumDashed = HSSFCellStyle.BORDER_MEDIUM_DASHED; HSSFRegionUtil.setBorderBottom( borderMediumDashed, region, sheet1, wb ); HSSFRegionUtil.setBorderTop( borderMediumDashed, region, sheet1, wb ); HSSFRegionUtil.setBorderLeft( borderMediumDashed, region, sheet1, wb ); HSSFRegionUtil.setBorderRight( borderMediumDashed, region, sheet1, wb ); HSSFRegionUtil.setBottomBorderColor(HSSFColor.AQUA.index, region, sheet1, wb); HSSFRegionUtil.setTopBorderColor(HSSFColor.AQUA.index, region, sheet1, wb); HSSFRegionUtil.setLeftBorderColor(HSSFColor.AQUA.index, region, sheet1, wb); HSSFRegionUtil.setRightBorderColor(HSSFColor.AQUA.index, region, sheet1, wb); // Shows some usages of HSSFCellUtil HSSFCellStyle style = wb.createCellStyle(); style.setIndention((short)4); HSSFCellUtil.createCell(row, 8, "This is the value of the cell", style); HSSFCell cell2 = HSSFCellUtil.createCell( row2, 8, "This is the value of the cell"); HSSFCellUtil.setAlignment(cell2, wb, HSSFCellStyle.ALIGN_CENTER); // Write out the workbook FileOutputStream fileOut = new FileOutputStream( "workbook.xls" ); wb.write( fileOut ); fileOut.close(); 19.在工作单中移动行,调整行的上下位置 HSSFWorkbook wb = new HSSFWorkbook(); HSSFSheet sheet = wb.createSheet("row sheet"); // Create various cells and rows for spreadsheet. // Shift rows 6 - 11 on the spreadsheet to the top (rows 0 - 5) sheet.shiftRows(5, 10, -5); FileOutputStream fileOut = new FileOutputStream("workbook.xls"); wb.write(fileOut); fileOut.close(); 20.选种指定的工作单 HSSFWorkbook wb = new HSSFWorkbook(); HSSFSheet sheet = wb.createSheet("row sheet"); sheet.setSelected(true); // Create various cells and rows for spreadsheet. FileOutputStream fileOut = new FileOutputStream("workbook.xls"); wb.write(fileOut); fileOut.close(); 21.工作单的放大缩小 HSSFWorkbook wb = new HSSFWorkbook(); HSSFSheet sheet1 = wb.createSheet("new sheet"); sheet1.setZoom(3,4); // 75 percent magnification FileOutputStream fileOut = new FileOutputStream("workbook.xls"); wb.write(fileOut); fileOut.close(); 22.头注和脚注 HSSFWorkbook wb = new HSSFWorkbook(); HSSFSheet sheet = wb.createSheet("new sheet"); HSSFHeader header = sheet.getHeader(); header.setCenter("Center Header"); header.setLeft("Left Header"); header.setRight(HSSFHeader.font("Stencil-Normal", "Italic") + HSSFHeader.fontSize((short) 16) + "Right w/ Stencil-Normal Italic font and size 16"); FileOutputStream fileOut = new FileOutputStream("workbook.xls"); wb.write(fileOut); fileOut.close(); 三、重点介绍 一个excel文档必备的内容都有什么呢: 1、文档的名字和保存的位置。(文档以xls结尾) 2、sheet页,一个excel文档可以包括多个sheet页 3、行 4、单元格(有些单元格是合并的) 5、单元格样式(包括背景颜色、对其方式等) HSSFWorkbook wb = new HSSFWorkbook(); //创建excel HSSFSheet sheet1 = wb.createSheet("new sheet"); //创建多个sheet页 HSSFSheet sheet2 = wb.createSheet("second sheet"); HSSFCellStyle style = wb.createCellStyle(); //设置单元格背景颜色 style.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND); style.setFillForegroundColor(HSSFColor.YELLOW.index); HSSFRow row = sheet1.createRow((short)0);//创建一行数据, row.createCell((short)0).setCellValue(1); //给第一行数据赋值 row.createCell((short)1).setCellValue(1.2); row.createCell((short)2).setCellValue("This is a string"); HSSFCell cell = row.createCell((short)3); cell.setCellValue(true); cell.setCellStyle(style);//设置单元格背景颜色 sheet1.addMergedRegion(new Region(0,(short)1,1,(short)1)); //合并单元格 HSSFCellStyle style_green = wb.createCellStyle(); //设置单元格背景颜色 style_green.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND); style_green.setFillForegroundColor(HSSFColor.LIME.index); style_green.setBorderBottom(HSSFCellStyle.BORDER_THIN); //下边框 style_green.setBorderLeft(HSSFCellStyle.BORDER_THIN);//左边框 style_green.setBorderTop(HSSFCellStyle.BORDER_THIN);//上边框 style_green.setBorderRight(HSSFCellStyle.BORDER_THIN);//右边框 style_green.setWrapText( true );//自动回车 style_green.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);//设置竖直方向居中 style_green.setAlignment(HSSFCellStyle.ALIGN_CENTER);//设置水平方向居中 sheet.setColumnWidth( (short) k, (short) ( ( 50 * 4 ) / ( (double) 1 / 20 ) ) );//设置单元格宽度 row1.setHeight((short) 0x220 );//设置行高度 页面弹出保存位置: req.setCharacterEncoding("UTF-8"); resp.setCharacterEncoding("UTF-8"); resp.setContentType("application/x-download"); SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd-HH-mm-ss"); String filedisplay = sdf.format(new Date())+".xls"; filedisplay = URLEncoder.encode(filedisplay, "UTF-8"); resp.addHeader("Content-Disposition", "attachment;filename="+ filedisplay); OutputStream out = resp.getOutputStream(); wb.write(out); 背景颜色: HSSFColor.ROYAL_BLUE HSSFColor.TEAL HSSFColor.LIME HSSFColor.PALE_BLUE HSSFColor.AQUA HSSFColor.GREEN HSSFColor.TURQUOISE HSSFColor.DARK_BLUE HSSFColor.CORNFLOWER_BLUE HSSFColor.OLIVE_GREEN HSSFColor.WHITE HSSFColor.LIGHT_TURQUOISE HSSFColor.LEMON_CHIFFON HSSFColor.LIGHT_GREEN HSSFColor.BLUE HSSFColor.DARK_RED HSSFColor.CORAL HSSFColor.RED HSSFColor.LIGHT_YELLOW HSSFColor.SKY_BLUE HSSFColor.BROWN HSSFColor.SEA_GREEN HSSFColor.INDIGO HSSFColor.MAROON HSSFColor.GREY_80_PERCENT HSSFColor.GREY_25_PERCENT HSSFColor.DARK_GREEN HSSFColor.YELLOW HSSFColor.GOLD HSSFColor.GREY_40_PERCENT HSSFColor.DARK_TEAL HSSFColor.PINK HSSFColor.ORCHID HSSFColor.LIGHT_BLUE HSSFColor.LIGHT_CORNFLOWER_BLUE HSSFColor.BLACK HSSFColor.DARK_YELLOW HSSFColor.VIOLET HSSFColor.LAVENDER HSSFColor.ROSE HSSFColor.BLUE_GREY HSSFColor.LIGHT_ORANGE HSSFColor.ORANGE HSSFColor.GREY_50_PERCENT http://blog.csdn.net/hollis_chuang/article/details/41411531
技术
# 工具
酷游
1月22日
0
14
0
1
2
下一页
易航博客