FreeMind 点亮智慧的明灯(版本号: 0.5.F-$Rev$ )

hide

FreeMind 
点亮智慧的明灯

(版本号: 0.5.F-$Rev$ )

hide
FreeMind 介绍
hide
首先了解 MindMap
leaf
思维导图又叫心智图,英国人托尼·巴赞创造
leaf
是将思路按照树状的结构进行线索的清理的一种整理思路的方法
leaf
MindMap 的树状组织结构和人脑力的物质基础——神经元的结构惊人的相似 8-)
leaf
Freemind 是 Java 开发的开源项目,提供 MindMap 的编辑和显示
hide
Freemind 的特色
leaf
Write once, Run everywhere (这是 Java 的特色) 8-)
leaf
开放的文件存储格式,是 XML 格式
leaf
支持 HTML 格式的节点
hide
Freemind 的应用范围
leaf
读书笔记
leaf
会议记录
leaf
所有你脑子里的东西 8-)
hide
FreeMind 版本
leaf
0.9.beta
hide
0.8.0
leaf
2005.06.09 发布
leaf
0.8.1
hidegohome
网址链接
hide
软件下载
hide
Whodo 增强版
hide
for Debian Linux
hide
添加 Debian 源:
leaf
deb http://YourName:YourPasswd@update.ossxp.com/public testing main
hide
导入 群英汇-开源速递 软件升级签名公钥
leaf
wget -q http://update.ossxp.com/public.key -O - | sudo apt-key add -
hide
安装 ossxp-freemind
leaf
apt-get update && apt-get install ossxp-freemind
leaf
注意: 可能需要身份认证,请输入在 WorldHello.net 的注册帐号和口令。
hide
FreeMind 标准版下载
hide
代码下载
hide
WHODO 的 FreeMind 代码补丁
hide
From WHODO SVN
leaf
svn checkout http://svn.worldhello.net/svn/whodo/trunk/doc/freemind/debian/patches
hide
官方 CVS 版本库
leaf
cvs -d :pserver:anonymous@cvs.sourceforge.net:/cvsroot/freemind checkout -r FM-0-8-0 freemind
leaf
cvs -d :pserver:anonymous@cvs.sourceforge.net:/cvsroot/freemind checkout freemind
hidepencil
FreeMind 的 WHODO 修改版
hide
为什么 WHODO 要使用修改过的 Freemind?
hide
FreeMind 对中文支持不好
leaf
0.8.0 版本的 FreeMind 对 Unicode 的支持仍然不好(本文档在 FreeMind 0.8.0 下就出现乱码)
leaf
FreeMind 的输出文件中,中文被编码为形如 “&#xxxx;”样子的格式
hide
一些易变属性,也保存在文档中(如节点的开、合状态)
leaf
即使只是展开 FreeMind 思维导图的节点,而没有做修改文字或者字体、颜色等实质改动,输出文件也变化
leaf
想到了 VC 6.0 和 VC 7.1 的工程文件的差别。VC 7.0 的工程文件就更适合版本控制,因为一些本地相关设置保存在另外的文件中。
leaf
这些问题,非常不利于 FreeMind 文档的版本控制
hide
WHODO 所做的修改
hide
WorldHello扩展功能设置
hide
字符编码
leaf
将中文字符以 UTF8 编码保存在 filename.mm 文件中,而不是 &#HEX; 格式的编码。
hide
附加的辅助文件
leaf
将不适合版本控制的属性保存在 filename.mm 文件之外的一个辅助文件中,辅助文件名为 .filename.mmx (扩展名为.mmx,文件名前加上一个点,在Unix下是隐藏文件)。
leaf
可以选择哪些属性从 filename.mm 文件移动到 .filename.mmx 文件。默认三个属性 'FOLDED', 'CREATED', 'MODIFIED' 都被移动到附加的辅助文件中。
leaf
注:“WorldHello扩展”扩展菜单在 FreeMind 0.9.0.Beta.17+wh-13 版本之后引入
hide
中文编码补丁
leaf
为 FreeMind 输出文件添加 XML 文件声明和编码。
leaf
使用 XML DOM 加载 FreeMind 的 .mm 文件。
leaf
修正 FreeMind 版本检查的 Bug(原设计:只读取第一行以获取 mmap 版本)
hide
易变属性剥离的补丁
leaf
易变节点设置不再保存在 .mm 文件中,而是单独提取出来,保存在另外的一个文件中(该文件命名为 .mmx )
leaf
即 FreeMind 保存时,除了建立一个 .mm 文件,还保存另外一个扩展名为 .mmx 的同名文件。(.mmx 文件保存的是附加节点属性)
leaf
FreeMind 加载 .mm 文件时,自动加载 .mmx 文件中的设置
leaf
综上所述,Freemind 的 WHODO 修改版,提供了 Freemind 更好的中文支持和更易于版本控制的文件格式
leaf
如何安装 FreeMind 的 WHODO 修改版?
Arrow Link
hide
TODO
hide
解决加载速度慢的问题 (这个问题已经解决)
hide
旧版本中存在的问题
hide
1. 加载慢
leaf
对于比较大的 .mm 文档,合并存储附加节点属性的 .mmx 文档,速度慢,我测试了一个 200KB 的合并,最长要 4 分钟!
leaf
$ time xsltproc --stringparam mmx_file subject-forum.mmx freemind_join_mm_mmx.xslt subject-forum.mm > jx.mm  real    4m33.148s user    4m30.093s sys     0m0.015s
hide
2. 内存耗尽
leaf
同样是由于 .mm 和 .mmx 合并造成的
hide
搔到了谁的痒处?
leaf
如上所述,我在匆忙之中做出的修改,在合并附加节点属性中,存在效率问题
leaf
这一定搔到了部分人的痒处,期待您来完善……
hide
FreeMind 在网页上的显示
hide
两种方法主要方法
hide
推荐: Flash viewer
leaf
来自于 http://www.efectokiwano.net/mm 的一款依靠 JavaScript 和 Flash 的 mindmap 解决方案
hide
优势
leaf
Flash, Javascript 本身文件小,网络带宽占用小,加载迅速
leaf
格式更加美观
leaf
提供更多功能。如缩放、预览、查找等功能
hide
Java Applet
leaf
FreeMind 项目本身提供的一种浏览 .mm 文件的模式
hide
优点
leaf
代码和 FreeMind 师出同门
hide
缺点
leaf
该 Java applet 文件本身很大,下载会消耗带宽和时间!
hide
转换为 HTML
leaf
这种方法不是实时的在线显示,而是通过 FreeMind 的导出功能。
leaf
转换为 HTML 的最主要的好处,应该是更方便的打印。
hide
为什么我的浏览器显示不了网页上的 FreeMind 智图?
leaf
Flash 插件的版本不能低于 7.0,否则可能不能正确显示;
leaf
看看是否由于您的浏览器禁用了 JavaScript;
leaf
或者浏览器的广告过滤插件把 Flash 屏蔽掉了;
hideclanbomber
疑难解答
hide
运行 FreeMind,在显示 Splash 时挂起,不能继续运行
leaf
如果是在 Windows 平台使用,运行 freemind.bat。
leaf
如果是在 Linux 平台使用,运行 freemind.sh。
leaf
注意在 DOS窗口/Linux控制台下的错误显示
hide
不能保存 FreeMind 文件
leaf
查看一下 JRE 版本: java -version
leaf
尝试升级到最新的 JRE,再试试。
hide
在 Windows 平台不能运行,提示找不到 freemind.jar
leaf
看看是不是由于目录名中包含了特殊字符(如+号),造成查找 FreeMind 目录失败。
leaf
从 WordHello.net 下载的软件包名称中可能包含+号,如果在Windows平台直接展开到目录,就会出现这个问题。

例如展开到: C:\Bin\FreeMind-0.9.0BETA17+wh-13\
leaf
解决办法:修改FreeMind目录名。

例如:将 C:\Bin\FreeMind-0.9.0BETA17+wh-13\ 修改为 C:\Bin\FreeMind\
hide
Freemind Hacking Howto
hide
编译 FreeMind
leaf
动手修改 Freemind 代码之前,一定要先掌握 Freemind 的编译
hide
步骤
leaf
FreeMind 代码下载
leaf
安装 WHODO 的 Freemind 补丁
hide
安装软件
leaf
JDK
leaf
Eclipse
leaf
Ant
hide
Java Web Services Developer Pack 2.0
leaf
http://java.sun.com/xml/downloads/jaxb.html
hide
JAXB
leaf
Java Architecture for XML Binding
hide
JAXP
leaf
Java API for XML Processing
hide
JAXR
leaf
Java API for XML Registries (JAXR)
hide
JAXRPC
leaf
JAX-RPC Version 1.1.3_01 EA (Java API for XML-based RPC)
hide
SAAJ
leaf
SOAP with Attachments API for Java
leaf
创建 Eclipse 工程
leaf
Ant 编译
hide
FAQ
hide
JaxMe
leaf
http://ws.apache.org/jaxme/downloads.cgi
hide
build.xml 解析
hide
gen
Arrow Link
hide
xmlbind
hide
参数
leaf
<param name="gen.file" value="actions"/>
leaf
<param name="xsd.file" value="freemind_actions.xsd"/>
leaf
创建目录 ${gen.dir}/${gen.file},即 generated/actions
hide
xjc
hide
xjc 定义
leaf
<taskdef name="xjc" classname="com.sun.tools.xjc.XJCTask"

classpath="${jaxb}" />
leaf
schema: ${xsd.dir}/freemind_actions.xsd (.//freemind_actions.xsd)
leaf
目标: ${gen.dir}/actions (generated/actions)
leaf
package="freemind.controller.${gen.file}.generated.instance" />
leaf
将会由 ${xsd.dir}/${xsd.file} 生成 generated/actions/freemind/controller/actions/generated/instance/jaxb.properties 文件
hide
build
Arrow Link Arrow Link
leaf
创建目录 ${build} (即 ../bin/classes)
hide
build-generated
Arrow Link
hide
调用 -buildgen
hide
参数
leaf
<param name="gen.file" value="actions"/>
leaf
<param name="xsd.file" value="freemind_actions.xsd"/>
hide
javac 编译
leaf
源文件 ${gen.dir}/${gen.file}, (即 generated/actions)
leaf
目标 ${build} (即 ../bin/classes)
hide
拷贝文件
leaf
将 ${gen.dir}/actions/freemind/controller/actions/generated 目录

中的 **/jaxb.properties, **/*.ser 文件

拷贝到 ${build}/freemind/controller/actions/generated
hide
代码
leaf
<copy todir="${build}/freemind/controller/${gen.file}/generated" >

<fileset dir="${gen.dir}/${gen.file}/freemind/controller/${gen.file}/generated" >

<include name="**/jaxb.properties" />

<include name="**/*.ser" />

</fileset>

</copy>
hide
javac 编译
hide
源代码 srcdir="${src}"
leaf
除了 accessories/plugins/**, plugins/**,${gen.dir}/** 的代码
leaf
目标 destdir="${build}"
hide
代码
leaf
<javac srcdir="${src}"

destdir="${build}"

classpath="${classpath}"

debug="${debug}"

source="${java_source_version}"

target="${java_target_version}"

>
leaf
执行 accessories/plugins/build.xml,目标 build
hide
执行 plugins/build.xml,目标 build
leaf
plugins/build_help.xml, 目标 build
leaf
plugins/build_svg.xml, 目标 build
leaf
plugins/build_time..xml, 目标 build
hide
jar
leaf
创建目录 <mkdir dir="${dist.lib}" />
leaf
创建 ${dist.lib}/freemind.jar,即 freemind 的主要的 jar
hide
freemind.jar 中打包文件
hide
${build} 目录下
leaf
除了 accessories/** 和 plugins/**
hide
${src} 目录下
leaf
images/*
leaf
images/icons/*.png
leaf
freemind.properties
leaf
user.properties
leaf
patterns.xml
leaf
Resources*
leaf
mindmap_menus.xml
leaf
**/freemind_version_updater.xslt
hide
dist
leaf
拷贝 ${src} 中的 freemind.bat,freemind.sh,license,patterns.xml 到 ${dist} 目录中
leaf
拷贝 ${src}/user_comment.properties 到 ${dist}/user.properties 中
leaf
拷贝 ${src}/windows-launcher/Freemind.exe 到 ${dist} 中
hide
创建目录 ${dist}/accessories
leaf
将 ${src}/accessories 除了 ${src}/accessories/plugins 外拷贝其中
leaf
创建目录 ${dist}/plugins
hide
创建 ${dist.lib} 目录
leaf
拷贝 ${src}/lib 中 **/jaxb-xjc.jar, jarbundler.jar 拷贝其中
leaf
执行 accessories/plugins/build.xml,目标 dist
hide
执行 plugins/build.xml,目标 dist
leaf
plugins/build_help.xml, 目标 dist
leaf
plugins/build_svg.xml, 目标 dist
leaf
plugins/build_time..xml, 目标 dist
hide
browser
leaf
创建目录 <mkdir dir="${dist}/browser" />
leaf
创建 ${dist}/browser/freemindbrowser.jar,即浏览器 applet
hide
freemindbrowser.jar 包含文件
hide
${build} 目录下
leaf
freemind/extensions/*
leaf
freemind/view/*
leaf
freemind/view/mindmapview/*
leaf
freemind/main/*
leaf
freemind/controller/*
leaf
freemind/modes/*
leaf
freemind/modes/browsemode/*
leaf
accessories/plugins/**
hide
${src} 目录下
leaf
images/*
leaf
images/icons/*.png
leaf
*.properties
leaf
accessories/plugins/**
hide
拷贝文件
leaf
${src}/freemind.properties 拷贝到 ${src}/user.properties
leaf
将 ${src}/html/*.*html 拷贝到 ${dist}/browser 下
hide
doc
leaf
创建目录 ${dist}/doc
leaf
创建目录 ${dist}/doc/javadoc
leaf
将 ${src}/doc/freemind.mm 文件拷贝到 ${dist}/doc
leaf
将 ${src} 中 freemind.* 的 package 生成 javadoc 到 ${dist}/doc/javadoc 目录
hide
post
leaf
创建目录 ${post}
hide
创建 ${post}/freemind-bin.tar.gz 和 freemind-bin.zip
leaf
包含 ${dist} 中除了 browser/,doc/javadoc/,plugins/** 外的文件
hide
创建 ${post}/freemind-src.tar.gz 和 freemind-src.zip
leaf
包含 ${src_base_for_post}(../) 中 freemind/**,.classpath,.project 文件
hide
创建 ${post}/freemind-browser.tar.gz 和 freemind-browser.zip
leaf
包含 ${dist}/browser 文件
hide
执行 plugins/build.xml,目标 post
leaf
plugins/build_help.xml, 目标 post
leaf
plugins/build_svg.xml, 目标 post
leaf
plugins/build_time..xml, 目标 post
hide
run
leaf
执行 ${FM.jar} 的 freemind.main.FreeMind
hide
clean
leaf
删除目录 build, dist, dist_macos_base, gen.dir, post,

删除文件 src/**/*~
hide
build.xml 异常处理
hide
报错
leaf
E:\Home\WORK\eclipse\freemind\build.xml:23: taskdef class com.loomcom.ant.tasks.jarbundler.JarBundler cannot be found
hide
在 Preferences -> Ant -> Runtime -> Classpath 中设置。
leaf
Add jars -> freemind/lib/jarbundler-1.4.jar
hide
报错
leaf
E:\Home\WORK\eclipse\freemind\build.xml:35: taskdef class com.sun.tools.xjc.XJCTask cannot be found
hide
在 Preferences -> Ant -> Runtime -> Classpath 中设置。
leaf
Add jars -> freemind/lib/ant/lib/jaxb-xjc.jar
hide
报错
leaf
E:\Home\WORK\eclipse\freemind\build.xml:75: The following error occurred while executing this line:

java.lang.NoClassDefFoundError: org/apache/xerces/xni/XNIException
leaf
使用 jwsp2.0 的 lib 取代 freemind/lib 下的 jar 文件
hide
报错
leaf
[javac] Compiling 65 source files to E:\Home\WORK\eclipse\bin\classes

[javac] E:\Home\WORK\eclipse\freemind\generated\actions\freemind\controller\actions\generated\instance\AddArrowLinkXmlAction.java:45: -source 1.3 中不支持注释

[javac] (请尝试使用 -source 1.5 以启用注释)

[javac] @XmlAccessorType(AccessType.FIELD)

[javac] ^
leaf
如何 debug classpath 的值? <fail message="${classpath}"/>
leaf
解决方法:问题出在 java_target_version 的值,修改为 1.5
hide
报错
leaf
[javac] E:\Home\WORK\eclipse\freemind\freemind\preferences\layout\OptionPanel.java:67: 找不到符号

[javac] 符号: 类 OptionPanelWindowConfigurationStorageType

[javac] 位置: 软件包 freemind.controller.actions.generated.instance

[javac] import freemind.controller.actions.generated.instance.OptionPanelWindowConfigurationStorageType;

[javac] ^
leaf
classpath 为 :

lib/ant/lib/jaxb-xjc.jar:lib/ant/lib/jaxb-api.jar:lib/ant/lib/jaxb-impl.jar:lib/ant/lib/jaxb-libs.jar:lib/ant/lib/namespace.jar:lib/ant/lib/relaxngDatatype.jar:lib/ant/lib/xsdlib.jar:lib/ant/lib/jax-qname.jar:lib/ant/lib/sax.jar:lib/ant/lib/dom.jar:lib/commons-lang-2.0.jar:lib/forms-1.0.5.jar
hide
创建 Eclipse 工程
hide
目录结构
leaf
.classpath

.project

freemind/build.xml

freemind/accessories

freemind/freemind

freemind/plugins

...
leaf
从 build.xml 创建新 java 工程
hide
如何提交更改?
hide
Wiki
leaf
在 Wiki 上建立自述页面 User:YOUR_NAME,并将自己的更改作为自述页面的自页面;
leaf
格式参照: http://freemind.sourceforge.net/wiki/index.php/User:Jiangxin
leaf
提交到 WHODO Wiki 上,最好在提交到 http://freemind.sourceforge.net/wiki/ 上一份,因为那里是 FreeMind 大本营,有足够多的眼睛帮你找 Bug
hide
SVN
leaf
申请获得 WHODO SVN 用户账号;
hide
关于 Freemind.exe
leaf
实际上是 lib/freemind.jar 的一个 Wrapper
hide
实际执行的命令行
leaf
javaw.exe
hide
-Xmx256M
leaf
内存最大占用 256MB。因此如果编辑大文件,存在内存问题,可以从这里入手修改。
leaf
-jar
leaf
<PATH>\\lib\\freemind.jar
leaf
其余参数从 main() 的参数传递
leaf
最后一个参数为 null
leaf
如果将来编辑大文件(100MB)存在内存问题,可能需要修改 Freemind.exe 调用 JVM 的参数!
hide
处理流程
hide
freemind.main
hide
main/FreeMind.java
leaf
main()
hide
文件打开
hide
modes/ControllerAdapter.java
leaf
打开文件对话框
hide
line 660: public void open()
leaf
加载文件: load(chooser.getSelectedFile());
Arrow Link
hide
line 541: public void load (File file)
Arrow Link
leaf
model.load(file);
hide
modes/mindmapmode/MindMapMapModel.java
hide
line 508: public void load(File file)
hide
MindMapNodeModel root = loadTree(file);
Arrow Link
leaf
加载文件
leaf
是不是在这里加载 .mmx 文件?
hide
line 544: loadTree(File file)
leaf
检查文件头 <map version=...,因此如果最前面加上 <?xml ... 会造成版本判断错误!
hide
版本正确
leaf
reader = getActualReader(file);
hide
版本太旧
hide
reader = getUpdateReader(file);
leaf
用 xslt 文件 freemind/modes/mindmapmode/freemind_version_updater.xslt 进行格式转换
leaf
mapElement.parseFromReader(reader);
hide
文件保存
hide
modes/ControllerAdapter.java
hide
line 699: public boolean saveAs()
leaf
File f = chooser.getSelectedFile();
hide
保存文件到 f,并强制扩展名为 .mm
leaf
String ext = Tools.getExtension(f.getName());

if(!ext.equals("mm")) {

f = new File(f.getParent(),f.getName()+".mm"); }
leaf
调用 save(f) 保存文件
Arrow Link
hide
public boolean save(File file)
leaf
调用 getModel().save(file)
hide
modes/mindmapmode/MindMapMapModel.java
leaf
line 406: save(File file)
Arrow Link
hide
line 411: boolean saveInternal(File file, boolean isInternal)
hide
保存文件
leaf
BufferedWriter fileout = new BufferedWriter( new OutputStreamWriter( new FileOutputStream(file), FreeMind.DEFAULT_CHARSET ) );
leaf
getXml(fileout);
Arrow Link
leaf
增加保存 .mmx 文件,用于保存 fold 等属性
hide
line 445: getXml(fileout)
leaf
保存 XML 文件
leaf
((MindMapNodeModel)getRoot()).save(fileout, this.getLinkRegistry());
Arrow Link
hide
modes/mindmapmode/MindMapNodeModel.java
leaf
继承 NodeAdapter
Arrow Link
hide
modes/NodeAdapter.java
hide
line 829: public XMLElement save(Writer writer, MindMapLinkRegistry registry)
hide
不保存 FOLDED 属性
leaf
if (0 == save_attr)

{

if (!isRoot() && !isLeaf()) {

node.setAttribute("FOLDED","true");

}

}
hide
写 node
hide
child.save(writer, registry);

node.writeClosingTag(writer);
leaf
如果包含字节点
leaf
node.write(writer);
Arrow Link
hide
main/XMLElement.java
leaf
line 2193: public void write(Writer writer, boolean withClosingTag)
hide
设置 only_attlist
leaf
只保存 only_attlist 的属性。不再检查 hide_attlist
hide
设置 hide_attlist
leaf
不保存 hide_attlist 的属性
hide
设置 em_attlist
leaf
设置为强调的 em_attlist,另起一行显示。显示完毕如果还有属性值,换行并缩进
hide
Hacking
hide
版本号
hide
main/FreeMind.java
leaf
public static final String version = "0.8.0(worldhello.net)";
hide
controller/Controller.java
leaf
该文件读取 FreeMind.version,但是由于没有设置依赖关系,造成 About 对话框没有更新。需要 rebuild.
hide
build.xml
leaf
<property name="ver" value="0_8_0" />
leaf
决定生成 jar 文件的文件名
hide
中文内容的存储。utf-8 格式的 xml 文件。
hide
文件 modes/ControllerAdapter.java
leaf
public boolean saveAs()
leaf
public boolean save(File file)
hide
modes/mindmapmode/MindMapMapModel.java
hide
private boolean saveInternal(File file, boolean isInternal)
leaf
保存文件接口, isInternal 为 true,则是保存备份
hide
line 418 增加 charset 设置
leaf
BufferedWriter fileout = new BufferedWriter( new OutputStreamWriter( new FileOutputStream(file), "UTF-8" ) );
hide
line 444: public void getXml(Writer fileout)
leaf
写 XML 文件
hide
增加一行
leaf
fileout.write("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n");
leaf
((MindMapNodeModel)getRoot()).save(fileout, this.getLinkRegistry());
Arrow Link
hide
modes/public XMLElement save(Writer writer, MindMapLinkRegistry registry)
leaf
保存 node 信息
hide
NODE 格式
leaf
<node CREATED="1143916340296" FOLDED="true" ID="Freemind_Link_747410934" MODIFIED="1143916344265" POSITION="right" TEXT="&#x7ed3;&#x675f;&#x6d4b;&#x8bd5;">
hide
main/XMLElement.java
hide
public void write(Writer writer, boolean withClosingTag)
leaf
保存 node
leaf
this.writeEncoded(writer, this.contents);
hide
protected void writeEncoded(Writer writer, String str)
leaf
int unicode = (int) ch;

if ((unicode < 32) /*|| (unicode > 126)*/ ) {

writer.write('&'); writer.write('#');

writer.write('x');

writer.write(Integer.toString(unicode, 16));

writer.write(';');

} else {

writer.write(ch);

}
leaf
写入:String newStr = new String(oldStr.getByte(“GB2312”), “ISO8859_1”);

读出:String newStr = new String(oldStr.getByte(“ISO8859_1”),”GB2312”);
hide
示例
leaf
import java.io.*;



public class inputtest {



public static void main(String[] args) {

String outfile = null;



try { convert(args[0], args[1], "GB2312", "UTF8"); } // or "BIG5"

catch (Exception e) {

System.out.print(e.getMessage());

System.exit(1);

}

}



public static void convert(String infile, String outfile, String from, String to)

throws IOException, UnsupportedEncodingException

{

// set up byte streams

InputStream in;

if (infile != null) in = new FileInputStream(infile);

else in = System.in;

OutputStream out;

if (outfile != null) out = new FileOutputStream(outfile);

else out = System.out;



// Use default encoding if no encoding is specified.

if (from == null) from = System.getProperty("file.encoding");

if (to == null) to = System.getProperty("file.encoding");



// Set up character stream

Reader r = new BufferedReader(new InputStreamReader(in, from));

Writer w = new BufferedWriter(new OutputStreamWriter(out, to));



// Copy characters from input to output. The InputStreamReader

// converts from the input encoding to Unicode,, and the OutputStreamWriter

// converts from Unicode to the output encoding. Characters that cannot be

// represented in the output encoding are output as '?'

char[] buffer = new char[4096];

int len;

while((len = r.read(buffer)) != -1)

w.write(buffer, 0, len);

r.close();

w.flush();

w.close();

}



}
leaf
public String toString()
hide
fold/unford 的存储信息保存在外部
leaf
保存在文件 .mmx 中
leaf
读入 MindMap,连同 .mmx 一并读入
leaf
节点被选择后,输入 ascii 字符,直接替换,但是输入中文则不起作用!
hide
设置对话框增加
leaf
保存文件的字符集
leaf
分开存放 fold/unfold 等信息
hidehelp
其他
hide
用户自定义
leaf
目录: C:\Documents and Settings\<UserName>\.freemind
hide
user.properties
leaf
C:\Documents and Settings\<UserName>\.freemind\user.properties
hide
patterns.xml
leaf
用户可以自定义 patterns.xml
leaf
自定义样式
hide
自动保存
hide
自动保存的目录
leaf
user.properties 中的默认配置是 path_to_automatic_saves=freemind_home
leaf
即 user.properties 所在的目录
hide
版本控制
hide
版本
hide
0.4
leaf
补充 Debian Linux 下安装 WorldHello 版本的 FreeMind。(2007/06/19)
leaf
增加 FreeMind Flash player 限制条件。(2007/06/19)
hide
0.3
leaf
修改 whodo svn 地址。 (2007/06/04)
leaf
添加 freemind 下载地址。 (2007/06/04)
hide
0.2
leaf
补充 FreeMind 在网页上的显示。 (2006/05/03)
hide
作者