ruby文件夹操作

Python010

ruby文件夹操作,第1张

一、新建文件

f=File.new(File.join("C:","Test.txt"), "w+")

f.puts("I am Jack")

f.puts("Hello World")

文件模式

"r" :Read-only. Starts at beginning of file (default mode).

"r+" :Read-write. Starts at beginning of file.

"w" :Write-only. Truncates existing file to zero length or creates a new file for writing.

"w+" :Read-write. Truncates existing file to zero length or creates a new file for reading and writing.

"a" :Write-only. Starts at end of file if file existsotherwise, creates a new file for writing.

"a+" :Read-write. Starts at end of file if file existsotherwise, creates a new file for reading and writing.

"b" :(DOS/Windows only.) Binary file mode. May appear with any of the key letters listed above

二、读取文件

file=File.open(File.join("C:","Test.txt"),"r")

file.each { |line| print "#{file.lineno}.", line }

file.close

三、新建、删除、重命名文件

File.new( "books.txt", "w" )

File.rename( "books.txt", "chaps.txt" )

File.delete( "chaps.txt" )

四、目录操作

1     创建目录

Dir.mkdir("c:/testdir")

04     #删除目录

05     Dir.rmdir("c:/testdir")

07     #查询目录里的文件

08     p Dir.entries(File.join("C:","Ruby")).join(' ')

10     #遍历目录

11     Dir.entries(File.join("C:","Ruby")).each {

|e| puts e

}

1、ARGV and ARGF

ARGV

ARGV <<"cnblogslink.txt"

#The gets method is a Kernel method that gets lines from ARGV

print while gets

p ARGV.class

ARGF

while line = ARGF.gets

print line

end

2、文件信息查询

#文件是否存在

p File::exists?( "cnblogslink.txt" ) # =>true

#是否是文件

p File.file?( "cnblogslink.txt" ) # =>true

#是否是目录

p File::directory?( "c:/ruby" ) # =>true

p File::directory?( "cnblogslink.txt" ) # =>false

#文件权限

p File.readable?( "cnblogslink.txt" ) # =>true

p File.writable?( "cnblogslink.txt" ) # =>true

p File.executable?( "cnblogslink.txt" ) # =>false

#是否是零长度

p File.zero?( "cnblogslink.txt" ) # =>false

#文件大小 bytes

p File.size?( "cnblogslink.txt" ) # =>74

p File.size( "cnblogslink.txt" ) # =>74

#文件或文件夹

p File::ftype( "cnblogslink.txt" ) # =>"file"

#文件创建、修改、最后一次存取时间

p File::ctime( "cnblogslink.txt" ) # =>Sat Sep 19 08:05:07 +0800 2009

p File::mtime( "cnblogslink.txt" ) # =>Sat Sep 19 08:06:34 +0800 2009

p File::atime( "cnblogslink.txt" ) # =>Sat Sep 19 08:05:07 +0800 2009

3、查找文件

puts "查找目录下所有文件及文件夹"

Dir["c:/ruby/*"].each {|x|

puts x

}

puts "条件查询"

Dir.foreach('c:/ruby') {

|x| puts x if x != "." &&x != ".."

}

puts "查找某一类型文件"

Dir["*.rb"].each {|x|

puts x

}

puts "Open 查询"

Dir.open('c:/ruby') { |d| d.grep /l/ }.each{|x| puts x}

puts "---------------------------"

puts "正则表达式查询"

Dir["c:/ruby/ruby/[rs]*"].each{|x| puts x}

puts "------------------------"

Dir["c:/ruby/[^s]*"].each{|x| puts x}

puts "------------------------"

Dir["c:/ruby/{ruby,li}*"].each{|x| puts x}

puts "------------------------"

Dir["c:/ruby/?b*"].each{|x| puts x}

puts "查找目录及子目录的文件"

require 'find'

Find.find('./') { |path| puts path }

3、查询目录及子目录文件

require "find"

Find.find("/etc/passwd", "/var/spool/lp1", ".") do |f|

Find.prune if f == "."

puts f

end

原型:ref.find( [ aName ]* ) {| aFileName | block }

prune:Skips the current file or directory, restarting the loop with the next entry. If the current file is a directory, that directory will not be recursively entered. Meaningful only within the block associated with Find::find.

4、文件比较 复制等

require 'ftools'

File.copy 'testfile', 'testfile1'  » true

File.compare 'testfile', 'testfile1'  » true

ruby中判断目录是否存在:

File.directory?(argu)

ruby文件操作:使用File类的静态方法,或者File类的实例对象

File类的静态方法

File::atime(filename)

返回指定文件的最后访问时间

1.创建文件夹

Dir.new %%1

Dir::mkdir #不指定目录全名称时,缺省为工作目录

Dir::chdir() 改变当前脚本工作目录

FileUtils.mkdir 'test'

file = File.new("cmd.txt")

file.each do |line|

puts line if line =~ /target/

end

2.创建文件

改变当前根目录

Dir.chdir("/home/guy/sandbox/tmp") 

 

Dir.chroot("/home/guy/sandbox")

Dir.new %%1

#Dir::rmdir #不指定目录全名称时,缺省为工作目录

3.删除文件

改变当前根目录

Dir.chdir("/home/guy/sandbox/tmp") 

Dir.chroot("/home/guy/sandbox")

Dir.new %%1

#Dir::rmdir #不指定目录全名称时,缺省为工作目录

4.删除文件夹

#require 'fileutils' 

FileUtils.rm_r(%%1)

5.删除一个文件下夹所有的文件夹

Dir::chdir

Dir::pwd属性或者Dir.getwd()

#改变当前脚本工作目录

6.清空文件夹

Dir::chdir %%1 改变当前脚本工作目录

Dir::rmdir #不指定目录全名称时,缺省为工作目录

Dir.new %%1

#require 'ftools'

FileUtils.mkdir 'test'

file = File.new(%%1) #"cmd.txt"

file.each do |line|

puts line if line =~ /target/

end

7.读取文件

#require 'ftools'

File.open(%%1).readlines #'文件名'

#require 'ftools'

arr = IO.readlines(%%1) #"myfile"

lines = arr.size

#puts "myfile has #{lines} lines in it."

#longest = arr.collect {|x| x.length}.max

#puts "The longest line in it has #{longest} characters."

8.写入文件

f=open(%%1,"w")

f.puts(%%2)

9.写入随机文件

#require 'ftools'

file = File.open(%%1,"w") 

file.seek(5) 

str = file.gets # "fghi"

#require 'ftools'

File.open('文件名')

File.open("cmd.txt","r") do |file|

while line=file.gets

puts line

end

end

puts

file=File.new("cmd.txt","r")

file.each_line do |line|

puts line

end

IO.foreach("cmd.txt") do |line|

puts line if line =~ /target/

puts line if line !~ /target/

end

###

Dir#pos

返回当前子文件指针

Dir#pos=

设置子文件指针

Dir#rewind

设置子文件指针到起始位置

Dir#seek

设置子文件指针

Dir#tell

获取当前指针

10.读取文件属性

#文件中是否有内容,(返回false为有内容,返回true为空)

File.new('文件名').stat.zero?

#文件大小

File.size?('文件名')

flag1 = FileTest::zero?("file1")

flag2 = FileTest::size?("file2")

size1 = File.size("file1")

size2 = File.stat("file2").size

###

File::atime(filename)

返回指定文件的最后访问时间

11.写入属性

12.枚举一个文件夹中的所有文件夹

#require 'ftools'

puts Dir.glob('**/*').each { | file | file.downcase }

#要区分目录和普通文件我们这样使用

file1 = File.new("/tmp")

file2 = File.new("/tmp/myfile")

test1 = file1.directory? # true

test2 = file1.file? # false

test3 = file2.directory? # false

test4 = file2.file? # true

###

遍历目录

Dir.foreach(%%1) { |entry| puts entry}

13.复制文件夹

require "fileutils"

FileUtils.cp %%1,%%2

14.复制一个目录下所有的文件夹到另一个文件夹下

#require 'FileUtils'

list=Dir.entries(%%1)

list.each_index do |x|

FileUtils.cp "#{list[x]}",%%2 if !File.directory?(list[x])

end

15.移动文件夹

#require 'FileUtils'

FileUtils.mv %%1,%%2

16.移动一个目录下所有的文件夹到另一个目录下

#require 'FileUtils'

list=Dir.entries(%%1)

list.each_index do |x|

FileUtils.mv "#{list[x]}",%%2 if !File.directory?(list[x])

end

17.以一个文件夹的框架在另一个目录创建文件夹和空文件

#########################

//文件是否存在

File.exist?('文件名')

flag = FileTest::exist?("LochNessMonster")

flag = FileTest::exists?("UFO")

#########################

require 'rubygems'

require 'ruby-debug'

require "find"

module Cz_dirtools

def mkdirs_to(tar,src=Dir.getwd)

#debugger

if tar.class==NilClass then

puts "PLZ input target directory name..."

return

elsif !FileTest.directory?(tar)#如果tar不是一个目录

puts ("Creating #{File.expand_path(tar)}")

Dir.mkdir("#{File.expand_path(tar)}")#创建tar目录

end

src=if FileTest.directory?(src) then

src#如果src是一个目录名,则返回自身

else

File.dirname(src)#如果src为一个文件名,则返回该文件所在目录

end

#Dir.foreach可以复制目标路径第一层目录结构而不复制子目录

#~ Dir.foreach(src) do |dir|

#~ if FileTest.directory?(dir) &&dir!=tar &&dir!='..' &&dir!='.' then #忽略自身,忽略上级目录"..",忽略本级目录"."

#~ #puts dir

#~ begin

#~ Dir.mkdir("#{File.expand_path(tar)}/#{dir}")

#~ rescue#如果该目录已存在则直接跳过否则创建该目录

#~ end

#~ end

#~ end

#Find.find可以复制目标路径的完整目录结构,包括子目录

dirs=Array.new

Find.find(src) do |dir|

unless !FileTest.directory?(dir) || File.basename(dir)==tar || File.basename(dir)=='..' || File.basename(dir)=='.' || File.basename(dir)==File.basename(src)#忽略自身,忽略上级目录"..",忽略本级目录"."

dirs<<dir

end

end

#puts dirs

dirs.each do |dir|

begin

Dir.mkdir("#{File.expand_path(tar)}/#{dir.gsub(src,'')}")

rescue#如果该目录已存在则直接跳过否则创建该目录

end

end

end

end

require 'rubygems'

require 'ruby-debug'

require "find"

module Cz_dirtools

def mkdirs_to(tar,src=Dir.getwd)

#debugger

if tar.class==NilClass then

puts "PLZ input target directory name..."

return

elsif !FileTest.directory?(tar)#如果tar不是一个目录

puts ("Creating #{File.expand_path(tar)}")

Dir.mkdir("#{File.expand_path(tar)}")#创建tar目录

end

src=if FileTest.directory?(src) then

src#如果src是一个目录名,则返回自身

else

File.dirname(src)#如果src为一个文件名,则返回该文件所在目录

end

#Dir.foreach可以复制目标路径第一层目录结构而不复制子目录

#~ Dir.foreach(src) do |dir|

#~ if FileTest.directory?(dir) &&dir!=tar &&dir!='..' &&dir!='.' then #忽略自身,忽略上级目录"..",忽略本级目录"."

#~ #puts dir

#~ begin

#~ Dir.mkdir("#{File.expand_path(tar)}/#{dir}")

#~ rescue#如果该目录已存在则直接跳过否则创建该目录

#~ end

#~ end

#~ end

#Find.find可以复制目标路径的完整目录结构,包括子目录

dirs=Array.new

Find.find(src) do |dir|

unless !FileTest.directory?(dir) || File.basename(dir)==tar || File.basename(dir)=='..' || File.basename(dir)=='.' || File.basename(dir)==File.basename(src)#忽略自身,忽略上级目录"..",忽略本级目录"."

dirs<<dir

end

end

#puts dirs

dirs.each do |dir|

begin

Dir.mkdir("#{File.expand_path(tar)}/#{dir.gsub(src,'')}")

rescue#如果该目录已存在则直接跳过否则创建该目录

end

end

end

end

18.复制文件

#require 'FileUtils'

FileUtils.cp %%1, %%2

19.复制一个目录下所有的文件到另一个目录

#require 'FileUtils'

list=Dir.entries(%%1)

list.each_index do |x|

FileUtils.cp "#{list[x]}",%%2 if !File.directory?(list[x])

end

20.提取扩展名

21.提取文件名

%%2 = File.basename(%%1)

22.提取文件路径

%%2 = File.dirname(%%1)

23.替换扩展名

24.追加路径

25.移动文件

26.移动一个文件夹下所有文件到另一个目录

#require 'FileUtils'

list=Dir.entries(%%1)

list.each_index do |x|

FileUtils.mv "#{list[x]}",%%2 if !File.directory?(list[x])

end

27.指定目录下搜索文件

#require "find" 

 

def findfiles(dir, name) 

 list = [] 

 Find.find(dir) do |path| 

Find.prune if [".",".."].include? path 

case name 

 when String 

list << path if File.basename(path) == name 

 when Regexp 

list << path if File.basename(path) =~ name 

else 

 raise ArgumentError 

end 

 end 

 list 

end 

 

findfiles %%1,%%2 #"/home/hal", "toc.txt"

28.打开对话框

29.文件分割

逐字节对文件进行遍历

可以使用each_byte方法,如果你想要转换byte到字符的话使用chr方法:

file = File.new("myfile") 

e_count = 0 

file.each_byte do |byte| 

 e_count += 1 if byte == ?e 

end

30.文件合并

逐字节对文件进行遍历

可以使用each_byte方法,如果你想要转换byte到字符的话使用chr方法:

file = File.new("myfile") 

e_count = 0 

file.each_byte do |byte| 

 e_count += 1 if byte == ?e 

end

31.文件简单加密

32.文件简单解密

33.读取ini文件属性

34.合并一个文件下所有的文件

35.写入ini文件属性

36.获得当前路径

File.dirname($0)

37.读取XML数据库

38.写入XML数据库

39.ZIP压缩文件

#require 'rubygems'

#require 'zip/zipfilesystem'

Zip::ZipFile.open(%%1, Zip::ZipFile::CREATE) do |zip| #'zipfile.zip'

zip.file.open('file1', 'w') { |f| f <<'This is file 1.' }

zip.dir.mkdir('sub_dir')

zip.file.open('sub_dir/file2', 'w') { |f| f <<'This is file 2.' }

end

40.ZIP解压缩

41.获得应用程序完整路径

42.ZIP压缩文件夹

#require 'rubygems'

#require 'zip/zipfilesystem'

def compress

Zip::ZipFile.open 'zipfile.zip', Zip::ZipFile::CREATE do |zip|

add_file_to_zip('dir', zip)

end

end

def add_file_to_zip(file_path, zip)

if File.directory?(file_path)

Dir.foreach(file_path) do |sub_file_name|

add_file_to_zip("#{file_path}/#{sub_file_name}", zip) unless sub_file_name == '.' or sub_file_name == '..'

end

else

zip.add(file_path, file_path)

end

end

add_file_to_zip %%1,%%2

43.递归删除目录下的文件

#require 'ftools'

file_path = String.new

file_path="D:"

if File.directory? file_path

Dir.foreach(file_path) do |file|

if file!="." and file!=".."

puts "File:"+file

end

end

end

44.验证DTD

45.Schema 验证

46.Grep

#!/usr/bin/env ruby

# Grep with full regexp-functionality via ruby

if ARGV.shift == "-p"

pattern = Regexp.new(ARGV.shift)

else

puts "Please give me a pattern with the '-p' option"

exit

end

ARGV.each do |filename|

File.open(filename) do |file|

file.each do |line|

puts "#{filename} #{file.lineno.to_s}: #{line}" if

pattern.match(line)

end

end

end

Using it via: rgrep -p '/delete /i' *.php does not match anything, but

this

#!/usr/bin/env ruby

# Grep with full regexp-functionality via ruby

if ARGV.shift == "-p"

pattern = Regexp.new(ARGV.shift)

else

puts "Please give me a pattern with the '-p' option"

exit

end

ARGV.each do |filename|

File.open(filename) do |file|

file.each do |line|

puts "#{filename} #{file.lineno.to_s}: #{line}" if /delete

/i.match(line)

end

end

end

47.直接创建多级目录

#require "fileutils"

FileUtils.makedirs(%%1)

48.批量重命名

49.文本查找替换 ReplaceText

50.文件关联

51.操作Excel文件

52.设置JDK环境变量

53.选择文件夹对话框

54.删除空文件夹

55.发送数据到剪贴板

56.从剪贴板中取数据

57.获取文件路径的父路径

58.创建快捷方式 CreateShortCut

59.弹出快捷菜单

60.文件夹复制到整合操作

61.文件夹移动到整合操作

62.目录下所有文件夹复制到整合操作

63.目录下所有文件夹移动到整合操作

64.目录下所有文件复制到整合操作

65.目录下所有文件移动到整合操作

66.对目标压缩文件解压缩到指定文件夹

67.创建目录副本整合操作

68.打开网页

69.删除空文件夹整合操作

70.获取磁盘所有分区后再把光驱盘符去除(用"\0"代替),把结果放在数组allfenqu[] 中,数组中每个元素代表一个分区盘符,不包括 :\\ 这样的路径,allfenqu[]数组开始时存放的是所有盘符。

当我用这样的代码测试结果是正确的,光驱盘符会被去掉:

CString root//root代表盘符路径

for(i=0i<20i++) //0-20代表最大的盘符数

{

root.Format("%c:\\",allfenqu[i])

if(GetDriveType(root)==5)

allfenqu[i]='\0'

}

但我用这样的代码时结果却无法去掉光驱盘符,allfenqu[]中还是会包含光驱盘符:

CString root

for(i=0i<20i++)

{

root=allfenqu[i]+":\\"

if(GetDriveType(root)==5)

allfenqu[i]='\0'

}

Eclipse 是一个开放源代码的、基于Java的可扩展开发平台。就其本身而言,它只是一个框架和一组服务,用于通过插件组件构建开发环境。幸运的是,Eclipse 附带了一个标准的插件集,包括Java开发工具(Java DevelopmentKit,JDK)。

基本信息

中文名称 eclipse

外文名称 eclipse

早期开发商 OTI、IBM

类别 JAVA程序

适用领域计算机

目录

1基本含义

2历史

3发行版本

4语言拓展

5字符集设置

6使用技巧

7学习资料

8主要组成

9软件开发包

10新版本特点

eclipse-galileo

虽然大多数用户很乐于将 Eclipse 当作 Java 集成开发环境(IDE)来使用,但 Eclipse 的目标却不仅限于此。Eclipse 还包括插件开发环境(Plug-in Development Environment,PDE),这个组件主要针对希望扩展 Eclipse 的软件开发人员,因为它允许他们构建与 Eclipse 环境无缝集成的工具。由于 Eclipse 中的每样东西都是插件,对于给 Eclipse 提供插件,以及给用户提供一致和统一的集成开发环境而言,所有工具开发人员都具有同等的发挥场所。

这种平等和一致性并不仅限于 Java 开发工具。尽管 Eclipse 是使用Java语言开发的,但它的用途并不限于 Java 语言例如,支持诸如C/C++、COBOL、PHP、Android等编程语言的插件已经可用,或预计将会推出。Eclipse 框架还可用来作为与软件开发无关的其他应用程序类型的基础,比如内容管理系统。

基于 Eclipse 的应用程序的一个突出例子是 IBM Rational Software Architect,它构成了 IBM Java 开发工具系列的基础。

历史折叠

Eclipse最初是由IBM公司开发的替代商业软件Visual Age for Java的下一代IDE开发环境,2001年11月贡献给开源社区,现在它由非营利软件供应商联盟Eclipse基金会(Eclipse Foundation)管理。2003年,Eclipse 3.0选择OSGi服务平台规范为运行时架构。2007年6月,稳定版3.3发布2008年6月发布代号为Ganymede的3.4版2009年6月发布代号为Galileo的3.5版2010年6月发布代号为Helios的3.6版2011年6月发布代号为Indigo的3.7版2012年6月发布代号为Juno的4.2版2013年6月发布代号为Kepler的4.3版2014年6月发布代号为Luna的4.4版2015年6月项目要发布代号为Mars的4.5版。

发行版本折叠

从2006年起,Eclipse基金会每年都会安排同步发布(simultaneous release)。至今,同步发布主要在6月进行,并且会在接下来的9月及2月释放出SR1及SR2版本。

版本代号

平台版本

主要版本发行日期

SR1发行日期

SR2发行日期

Callisto

3.2

2006年6月26日

N/A

N/A

Europa

3.3

2007年6月27日

2007年9月28日

2008年2月29日

Ganymede

3.4

2008年6月25日

2008年9月24日

2009年2月25日

Galileo

3.5

2009年6月24日

2009年9月25日

2010年2月26日

Helios

3.6

2010年6月23日

2010年9月24日

2011年2月25日

Indigo

3.7

2011年6月22日

2011年9月23日

2012年2月24日

Juno

3.8及4.2

2012年6月27日

2012年9月28日

2013年3月1日

Kepler

4.3

2013年6月26日

2013年9月27日

2014年2月28日

Luna

4.4

2014年6月25日

2014年9月25日

2015年2月27日

Mars

4.5

2015年3月14日

N/A

N/A

展开

语言拓展折叠

Eclipse是著名的跨平台的自由集成开发环境(IDE)。最初主要用来Java语言开发,通过安装不同的插件Eclipse可以支持不同的计算机语言,比如C++和Python等开发工具。Eclipse的本身只是一个框架平台,但是众多插件的支持使得Eclipse拥有其他功能相对固定的IDE软件很难具有的灵活性。许多软件开发商以Eclipse为框架开发自己的IDE。

Eclipse 最初由OTI和IBM两家公司的IDE产品开发组创建,起始于1999年4月。IBM提供了最初的Eclipse代码基础,包括Platform、JDT 和PDE。Eclipse项目IBM发起,围绕着Eclipse项目已经发展成为了一个庞大的Eclipse联盟,有150多家软件公司参与到Eclipse项目中,其中包括Borland、Rational Software、Red Hat及Sybase等。Eclipse是一个开放源码项目,它其实是Visual Age for Java的替代品,其界面跟先前的Visual Age for Java差不多,但由于其开放源码,任何人都可以免费得到,并可以在此基础上开发各自的插件,因此越来越受人们关注。随后还有包括Oracle在内的许多大公司也纷纷加入了该项目,Eclipse的目标是成为可进行任何语言开发的IDE集成者,使用者只需下载各种语言的插件即可。

字符集设置折叠

点击导航栏里的 window ->Preferences

选择 General ->Content Types

在右侧红框里选择你要修改编码的文件类型

(一般我们会用到CSS,Java Source File,Java Propertis File 等等),

在绿框里修改编码,一般用"utf-8"。

修改完点击OK。

前三步是针对文件的,

我们还需要对我们的工作空间设置字符集编码。

我们可以去 General ->Workspace ->然后在图中的中间的红框里选择你需要的字符集,

然后你右下角的Apply执行操作。

使用技巧折叠

快捷方式折叠

<!--[if !supportLists]-->0. Ctrl + 1 (快速修复)

<!--[if !supportLists]-->1. Ctrl + D (删除当前行)

<!--[if !supportLists]-->2. Ctrl + Alt + ↓(复制当前行到下一行)

<!--[if !supportLists]-->3. Alt + / 或者说是 Ctrl + 空格(由于后者与输入法的快捷键冲突,所以,我一般都用前者) 作用:快速插入。

<!--[if !supportLists]-->4. Alt+Shift+R 重命名非常好用。

<!--[if !supportLists]-->5. Ctrl + Q 定位到最后编辑的地方。

<!--[if !supportLists]-->6. Ctrl + Shift + O 自动导入包。

<!--[if !supportLists]-->7. Ctrl+/ 注释当前行,再按则取消注释。

<!--[if !supportLists]-->8. Ctrl+K快速查找。

<!--[if !supportLists]-->9. Ctrl + Shift + F 自动缩进。

常用快捷键折叠

Eclipse最全快捷键,熟悉快捷键可以帮助开发事半功倍,节省更多的时间来用于做有意义的事情。

Ctrl+1 快速修复(最经典的快捷键,就不用多说了)

Ctrl+D: 删除当前行

Ctrl+Alt+↓ 复制当前行到下一行(复制增加)

Ctrl+Alt+↑ 复制当前行到上一行(复制增加)

Alt+↓ 当前行和下面一行交互位置(特别实用,可以省去先剪切,再粘贴了)

Alt+↑ 当前行和上面一行交互位置(同上)

Alt+← 前一个编辑的页面

Alt+→ 下一个编辑的页面(当然是针对上面那条来说了)

Alt+Enter 显示当前选择资源(工程,or 文件 or文件)的属性

Shift+Enter 在当前行的下一行插入空行(这时鼠标可以在当前行的任一位置,不一定是最后)

Shift+Ctrl+Enter 在当前行插入空行(原理同上条)

Ctrl+Q 定位到最后编辑的地方

Ctrl+L 定位在某行 (对于程序超过100的人就有福音了)

Ctrl+M 最大化当前的Edit或View (再按则反之)

Ctrl+/ 注释当前行,再按则取消注释

Ctrl+O 快速显示 OutLine

Ctrl+T 快速显示当前类的继承结构

Ctrl+W 关闭当前Editer

Ctrl+K 参照选中的Word快速定位到下一个

Ctrl+E 快速显示当前Editer的下拉列表(如果当前页面没有显示的用黑体表示)

Ctrl+/(小键盘) 折叠当前类中的所有代码

Ctrl+×(小键盘) 展开当前类中的所有代码

Ctrl+Space 代码助手完成一些代码的插入(但一般和输入法有冲突,可以修改输入法的热键,也可以暂用Alt+/来代替)

Ctrl+Shift+E 显示管理当前打开的所有的View的管理器(可以选择关闭,激活等操作)

Ctrl+J 正向增量查找(按下Ctrl+J后,你所输入的每个字母编辑器都提供快速匹配定位到某个单词,如果没

有,则在stutes line中显示没有找到了,查一个单词时,特别实用,这个功能Idea两年前就有了)

Ctrl+Shift+J 反向增量查找(和上条相同,只不过是从后往前查)

Ctrl+Shift+F4 关闭所有打开的Editer

Ctrl+Shift+X 把当前选中的文本全部变为大写

Ctrl+Shift+Y 把当前选中的文本全部变为小写

Ctrl+Shift+F 格式化当前代码

Ctrl+Shift+P 定位到对于的匹配符(譬如{}) (从前面定位后面时,光标要在匹配符里面,后面到前面,则反之)

下面的快捷键是重构里面常用的,本人就自己喜欢且常用的整理一下(注:一般重构的快捷键都是Alt+Shift开头的了)

Alt+Shift+R 重命名 (是我自己最爱用的一个了,尤其是变量和类的Rename,比手工方法能节省很多劳动力)

Alt+Shift+M 抽取方法 (这是重构里面最常用的方法之一了,尤其是对一大堆泥团代码有用)

Alt+Shift+C 修改函数结构(比较实用,有N个函数调用了这个方法,修改一次搞定)

Alt+Shift+L 抽取本地变量( 可以直接把一些魔法数字和字符串抽取成一个变量,尤其是多处调用的时候)

Alt+Shift+F 把Class中的local变量变为field变量 (比较实用的功能)

Alt+Shift+I 合并变量(可能这样说有点不妥Inline)

Alt+Shift+V 移动函数和变量(不怎么常用)

Alt+Shift+Z 重构的后悔药(Undo)

插件开发折叠

Eclipse的插件机制是轻型软件组件化架构。在客户机平台上,Eclipse使用插件来提供所有的附加功能,例如支持Java以外的其他语言。已有的分离的插件已经能够支持C/C++(CDT)、Perl、Ruby,Python、telnet和数据库开发。插件架构能够支持将任意的扩展加入到现有环境中,例如配置管理,而决不仅仅限于支持各种编程语言。

Eclipse的设计思想是:一切皆插件。Eclipse核心很小,其它所有功能都以插件的形式附加于Eclipse核心之上。Eclipse基本内核包括:图形API (SWT/Jface), Java开发环境插件(JDT ),插件开发环境(PDE)等。

插件安装折叠

Eclipse插件的安装方法大体有以下几种方式:

第一种:直接复制法

假设Eclipse的安装目录在C:\eclipse,解压下载的eclipse 插件或者安装eclipse 插件到指定目录AA(如:c:\AA)文件夹,打开AA 文件夹,在AA文件夹里分别包含两个文件夹features和plugins ,然后把两个文件夹里的文件分别复制到C:\eclipse下所对应的文件夹下的features 和plugins 下,一般的把插件文件直接复制到eclipse目录里是最直接也是最愚蠢的一种方法!因为日后想要删除这些插件会非常的困难,不推荐使用。

注意:直接将插件包解压到plugins文件夹下之后,重启eclipse,可能不会加载新的插件。

解决方法是:

1、打开命令行,到当前eclipse的目录下,输入eclipse -clean,重新启动eclipse,这样eclipse就会加上新的插件了。

2、如果插件不能生效,则请将eclipse\configuration\org.eclipse.update目录删除后再启动eclipse

你可以在eclipse的菜单"Help"-->"About EclipseSDK"-->"Feature Details" 和"Plug-in Details"中看到新安装的插件。

第二种:使用link文件法

a.假设Eclipse的安装目录在C:\eclipse,在该文件夹下,新建这样的目录结构C:\eclipse\PluginsEclipse\jode\eclipse

b.解压下载的eclipse 插件或者安装eclipse 插件到指定目录BB(如:C:\BB)文件夹,打开BB文件夹,然后把 BB文件夹里的两个文件夹features和plugins复制到刚新建好的,这样eclipse中就有了两个插件目录features and plugins下。

c.在C:\eclipse目录中新建links(C:\eclipse\links)目录,在links目录中建立一个以link为扩展名的文本文件如jode.link,内容如下path=C:/eclipse/PluginsEclipse/jode 或者path=C:\\eclipse\\PluginsEclipse\\jode(插件的目录),保存后重启eclipse插件就会安装完成。

注意:link文件中path=插件目录的path路径分隔要用\\或是/

Java代码

/eclipse/

links/

jode.link

webtools.link

updateManager.link

...

...

/eclipse/ links/ jode.link webtools.linkupdateManager.link ... ... 可以在eclipse的菜单"Help"-->"AboutEclipseSDK"-->"Feature Details" 和"Plug-in Details"中看到新安装的插件。

第三种:使用eclipse自带图形界面安装

选择Help >Software Updates >ManagerConfiguration,再选择Add >Extension Location 找到你要安装插件的目录就可以了。使用eclipse的help->SoftwareUpdates ->Find and install... searchfor new features... 输入软件安装地址进行安装强烈推荐这种方法,优点很多比如可以方便的添加删除,也不用自己写link文件!

备注:Eclipse插件的目录结构

Java代码

/eclipse-plugins/

eclipse/

.eclipseextension

features/

plugins/

第2.3种方法所指向的目录都指的是"eclipse"目录,

如果用第3种方法,在eclipse这个目录下必须有文件.eclipseextension,如果下载的插件没有这个文件,

那就随便eclipse安装目录下的那个文件拷过去就行,只要有这么个文件就可以了,内容没什么用,主要是一些版本信息。例如:

Java代码

id=org.eclipse.platform name=Eclipse Platform

version=3.1.1

id=org.eclipse.platform name=Eclipse Platform version=3.1.1

第四种:使用dropins安装插件

EclipseMacketpalce从Eclipse3.5开始,安装目录下就多了一个dropins目录。只要将插件解压后拖到该目录即可安装插件。

比如安装svn插件subclipse-1.8.16.zip,只需要如下的三步即可:

1、使用winrar等压缩软件将压缩包解压至某一文件夹,比如subclipse-1.8.16

2、将此目录移动/复制至Eclipse安装目录下的dropins目录

3、重启Eclipse。

由于此种安装方式可以将不同的插件安装在不同的目录里,并且不用麻烦地写配置文件,因此管理起来会非常方便,推荐使用。

第五种:使用EclipseMacketplace

在新版eclipse中选择Help >Software Updates >Eclipse Macketplace,这里有eclipse的插件市场,如图所示,可以直接搜索安装需要的插件,不必配置,一键安装,使用更加方便了。

学习资料折叠

《Eclipse从入门到精通》

《Eclipse使用入门教程》

《Eclipse Web开发从入门到精通(实例版)》

主要组成折叠

Eclipse是一个开放源代码的软件开发项目,专注于为高度集成的工具开发提供一个全功能的、具有商业品质的工业平台。它主要由Eclipse项目、Eclipse工具项目和Eclipse技术项目三个项目组成,具体包括四个部分组成--Eclipse Platform、JDT、CDT和PDE。JDT支持Java开发、CDT支持C开发、PDE用来支持插件开发,Eclipse Platform则是一个开放的可扩展IDE,提供了一个通用的开发平台。它提供建造块和构造并运行集成软件开发工具的基础。Eclipse Platform允许工具建造者独立开发与他人工具无缝集成的工具从而无须分辨一个工具功能在哪里结束,而另一个工具功能在哪里开始。

软件开发包折叠

Eclipse SDK(软件开发者包)是Eclipse Platform、JDT和PDE所生产的组件合并,它们可以一次下载。这些部分在一起提供了一个具有丰富特性的开发环境,允许开发者有效地建造可以无缝集成到Eclipse Platform中的工具。Eclipse SDK由Eclipse项目生产的工具和来自其它开放源代码的第三方软件组合而成。Eclipse项目生产的软件以 GPL发布,第三方组件有各自自身的许可协议。

新版本特点折叠

1.NLS string hover有一个Open in Properties File动作

2.在Caller模式下,调用层级(Call Hierarchy)有一个在上下文菜单中有一个Expand With Constructors动作

3.当你在编辑器中输入的时候,Java比较编辑器会更新其结构

4.有一个新的toString()产生器

5.为可覆盖方法增加了一个Open Implementation链接,可以直接打开其实现

6.编辑器与执行环境一致

7.Debug视图现在提供了breadcrumb(面包屑),显示了活动的debug上下文

8.可运行的JAR文件输出向导还可以把所需的类库打包进一个要输出的可运行JAR文件,或打包进与紧挨着该JAR的一个目录中

9.当在写一个分配表达式(allocation expression)时发生补全操作,ch内容助手可以提示一个类的可用构造方法

10.如果检测到无用代码,编译器可以发出警告

11.类库、变量或容器入口的路径可以是与项目相关的任何位置

12.在Jovadoc hover的头部及Javadoc视图中,都提供了引用其他类型和成员的链接

13.随该Eclipse发行的JUnit4版本更新为4.5

14.Javadoc视图及hovers都支持{@inheritDoc}标签并给覆盖方法增加链接

15.同一值的比较现在由编译器检测,默认情况下会发出警告