- ubuntu12.04环境下使用kvm ioctl接口实现最简单的虚拟机
- Ubuntu 通过无线网络安装Ubuntu Server启动系统后连接无线网络的方法
- 在Ubuntu上搭建网桥的方法
- ubuntu 虚拟机上网方式及相关配置详解
CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.
这篇CFSDN的博客文章java实现附件预览(openoffice+swftools+flexpaper)实例由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.
本文主要介绍了java实现附件预览,需要用到openoffice、SWFTools、FlexPaper,具体步骤如下:
1.概述 。
主要原理 。
1.通过第三方工具openoffice,将word、excel、ppt、txt等文件转换为pdf文件 。
2.通过swfTools将pdf文件转换成swf格式的文件 。
3.通过FlexPaper文档组件在页面上进行展示 。
2.安装包下载 。
1.openoffice是Apache下的一个开放免费的文字处理软件 。
下载地址:Apache oppenoffice 官网下载 版本-3.4.1 http://www.openoffice.org/zh-cn/download/ 。
2.SWFTools是一组用来处理Flash的swf文件的工具包,我们使用它将pdf文件转成swf文件.
下载地址:SWFTools官网下载 swftools-2013-04-09-1007.exe http://www.swftools.org/download.html 。
3.FlexPaper是一个开源轻量级的在浏览器上显示各种文档的组件 。
下载地址:FlexPaper官网下载 版本1.5.1 https://flowpaper.com/download/ 。
4.JODConverter一个Java的OpenDocument 文件转换器,在此我们只用到它的jar包 。
下载地址:JODCConverter下载 https://sourceforge.net/projects/jodconverter/files/ 。
3.安装文件 。
1.将所下载的文件(JODConverter除外)进行安装,盘符可随自己设定!需要注意的是在openoffice安装完成后,当我们使用它时,需将它的服务打开。在次我们需要以命令的方式打开
打开dos窗口,进入openoffice安装盘符,输入以下代码来启动服务:
soffice -headless -accept="socket,host=127.0.0.1,port=8100;urp;" -nofirststartwizard 。
注意最后一个命令前边的‘—',可不要写错!服务起不来,项目可是继续不下去的哦. 。
官网启动服务截图如下:
本地截图:
3.开发过程 。
1.新建项目,将flexpaper文件中的js文件夹(包含了flexpaper_flash_debug.js,flexpaper_flash.js,jquery.js,这三个js文件主要是预览swf文件的插件)拷贝至网站根目录;将FlexPaperViewer.swf拷贝至网站根目录下(该文件主要是用在网页中播放swf文件的播放器),目录结构如下图:
注:需创建upload文件夹 。
2.创建fileUpload.jsp 。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
|
<%@ page language=
"java"
contentType=
"text/html; charset=UTF-8"
pageEncoding=
"UTF-8"
%>
<!DOCTYPE html PUBLIC
"-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd"
>
<html>
<head>
<meta http-equiv=
"Content-Type"
content=
"text/html; charset=UTF-8"
>
<title>文档在线预览系统</title>
<style>
body {margin-top:100px;background:
#fff;font-family: Verdana, Tahoma;}
a {color:
#CE4614;}
#msg-box {color: #CE4614; font-size:0.9em;text-align:center;}
#msg-box .logo {border-bottom:5px solid #ECE5D9;margin-bottom:20px;padding-bottom:10px;}
#msg-box .title {font-size:1.4em;font-weight:bold;margin:0 0 30px 0;}
#msg-box .nav {margin-top:20px;}
</style>
</head>
<body>
<div id=
"msg-box"
>
<form name=
"form1"
method=
"post"
enctype=
"multipart/form-data"
action=
"docUploadConvertAction.jsp"
>
<div class=
"title"
>
请上传要处理的文件,过程可能需要几分钟,请稍候片刻。
</div>
<p>
<input name=
"file1"
type=
"file"
>
</p>
<p>
<input type=
"submit"
name=
"Submit"
value=
"上传"
>
</p>
</form >
</div>
</body>
</html>
|
3.创建转换页docUploadConvertAction.jsp 。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
|
<%@ page language=
"java"
contentType=
"text/html; charset=UTF-8"
pageEncoding=
"UTF-8"
%>
<%@page import=
"java.io.*"
%>
<%@page import=
"java.util.Enumeration"
%>
<%@page import=
"com.oreilly.servlet.MultipartRequest"
%>
<%@page import=
"com.oreilly.servlet.multipart.DefaultFileRenamePolicy"
%>
<%@page import=
"com.cectsims.util.DocConverter"
%>
<%
//文件上传采用cos组件上传,可更换为commons-fileupload上传,文件上传后,保存在upload文件夹
//获取文件上传路径
String saveDirectory =application.getRealPath(
"/"
)+
"upload"
;
//打印上传路径信息
System.out.println(saveDirectory);
//每个文件最大50m
int maxPostSize = 50 * 1024 * 1024 ;
//采用cos缺省的命名策略,重名后加1,2,3...如果不加dfp重名将覆盖
DefaultFileRenamePolicy dfp =
new
DefaultFileRenamePolicy();
//response的编码为"UTF-8",同时采用缺省的文件名冲突解决策略,实现上传,如果不加dfp重名将覆盖
MultipartRequest multi =
new
MultipartRequest(request, saveDirectory, maxPostSize,
"UTF-8"
,dfp);
//MultipartRequest multi = new MultipartRequest(request, saveDirectory, maxPostSize,"UTF-8");
//输出反馈信息
Enumeration files = multi.getFileNames();
while
(files.hasMoreElements()) {
System.err.println(
"ccc"
);
String name = (String)files.nextElement();
File f = multi.getFile(name);
if
(f!=
null
){
String fileName = multi.getFilesystemName(name);
//获取上传文件的扩展名
String extName=fileName.substring(fileName.lastIndexOf(
"."
)+1);
//文件全路径
String lastFileName= saveDirectory+
"\\"
+ fileName;
//获取需要转换的文件名,将路径名中的'\'替换为'/'
String converfilename = saveDirectory.replaceAll(
"\\\\"
,
"/"
)+
"/"
+fileName;
System.out.println(converfilename);
//调用转换类DocConverter,并将需要转换的文件传递给该类的构造方法
DocConverter d =
new
DocConverter(converfilename);
//调用conver方法开始转换,先执行doc2pdf()将office文件转换为pdf;再执行pdf2swf()将pdf转换为swf;
d.conver();
//调用getswfPath()方法,打印转换后的swf文件路径
System.out.println(d.getswfPath());
//生成swf相对路径,以便传递给flexpaper播放器
String swfpath =
"upload"
+d.getswfPath().substring(d.getswfPath().lastIndexOf(
"/"
));
System.out.println(swfpath);
//将相对路径放入sessio中保存
session.setAttribute(
"swfpath"
, swfpath);
out.println(
"上传的文件:"
+lastFileName);
out.println(
"文件类型"
+extName);
out.println(
"<hr>"
);
}
}
%>
<!DOCTYPE html PUBLIC
"-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd"
>
<html>
<head>
<meta http-equiv=
"Content-Type"
content=
"text/html; charset=UTF-8"
>
<title>Insert title here</title>
<style>
body {margin-top:100px;background:
#fff;font-family: Verdana, Tahoma;}
a {color:
#CE4614;}
#msg-box {color: #CE4614; font-size:0.9em;text-align:center;}
#msg-box .logo {border-bottom:5px solid #ECE5D9;margin-bottom:20px;padding-bottom:10px;}
#msg-box .title {font-size:1.4em;font-weight:bold;margin:0 0 30px 0;}
#msg-box .nav {margin-top:20px;}
</style>
</head>
<body>
<div>
<form name=
"viewForm"
id=
"form_swf"
action=
"documentView.jsp"
method=
"POST"
>
<input type='submit
' value='
预览
' class='
BUTTON SUBMIT'/>
</form>
</div>
</body>
</html>
|
创建查看页documentView.jsp 。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
|
<%@ page language=
"java"
contentType=
"text/html; charset=UTF-8"
pageEncoding=
"UTF-8"
%>
<%
String swfFilePath=session.getAttribute(
"swfpath"
).toString();
%>
<!DOCTYPE html PUBLIC
"-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd"
>
<html>
<head>
<meta http-equiv=
"Content-Type"
content=
"text/html; charset=UTF-8"
>
<script type=
"text/javascript"
src=
"js/jquery.js"
></script>
<script type=
"text/javascript"
src=
"js/flexpaper_flash.js"
></script>
<script type=
"text/javascript"
src=
"js/flexpaper_flash_debug.js"
></script>
<style type=
"text/css"
media=
"screen"
>
html, body { height:100%; }
body { margin:0; padding:0; overflow:auto; }
#flashContent { display:none; }
</style>
<title>文档在线预览系统</title>
</head>
<body>
<div style=
"position:absolute;left:50px;top:10px;"
>
<a id=
"viewerPlaceHolder"
style=
"width:820px;height:650px;display:block"
></a>
<script type=
"text/javascript"
>
var
fp =
new
FlexPaperViewer(
'FlexPaperViewer'
,
'viewerPlaceHolder'
, { config : {
SwfFile : escape(
'<%=swfFilePath%>'
),
Scale : 0.6,
ZoomTransition :
'easeOut'
,
ZoomTime : 0.5,
ZoomInterval : 0.2,
FitPageOnLoad :
true
,
FitWidthOnLoad :
false
,
FullScreenAsMaxWindow :
false
,
ProgressiveLoading :
false
,
MinZoomSize : 0.2,
MaxZoomSize : 5,
SearchMatchAll :
false
,
InitViewMode :
'SinglePage'
,
ViewModeToolsVisible :
true
,
ZoomToolsVisible :
true
,
NavToolsVisible :
true
,
CursorToolsVisible :
true
,
SearchToolsVisible :
true
,
localeChain:
'en_US'
}});
</script>
</div>
</body>
</html>
|
5.创建转换类DocConverter.java 。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
|
package
com.cectsims.util;
import
java.io.BufferedInputStream;
import
java.io.File;
import
java.io.IOException;
import
java.io.InputStream;
import
com.artofsolving.jodconverter.DocumentConverter;
import
com.artofsolving.jodconverter.openoffice.connection.OpenOfficeConnection;
import
com.artofsolving.jodconverter.openoffice.connection.SocketOpenOfficeConnection;
import
com.artofsolving.jodconverter.openoffice.converter.OpenOfficeDocumentConverter;
/**
* doc docx格式转换
*/
public
class
DocConverter {
private
static
final
int
environment =
1
;
// 环境 1:windows 2:linux
private
String fileString;
// (只涉及pdf2swf路径问题)
private
String outputPath =
""
;
// 输入路径 ,如果不设置就输出在默认的位置
private
String fileName;
private
File pdfFile;
private
File swfFile;
private
File docFile;
public
DocConverter(String fileString) {
ini(fileString);
}
/**
* 重新设置file
*
* @param fileString
*/
public
void
setFile(String fileString) {
ini(fileString);
}
/**
* 初始化
*
* @param fileString
*/
private
void
ini(String fileString) {
this
.fileString = fileString;
fileName = fileString.substring(
0
, fileString.lastIndexOf(
"."
));
docFile =
new
File(fileString);
pdfFile =
new
File(fileName +
".pdf"
);
swfFile =
new
File(fileName +
".swf"
);
}
/**
* 转为PDF
*
* @param file
*/
private
void
doc2pdf()
throws
Exception {
if
(docFile.exists()) {
if
(!pdfFile.exists()) {
OpenOfficeConnection connection =
new
SocketOpenOfficeConnection(
8100
);
try
{
connection.connect();
DocumentConverter converter =
new
OpenOfficeDocumentConverter(connection);
converter.convert(docFile, pdfFile);
// close the connection
connection.disconnect();
System.out.println(
"****pdf转换成功,PDF输出:"
+ pdfFile.getPath()+
"****"
);
}
catch
(java.net.ConnectException e) {
e.printStackTrace();
System.out.println(
"****swf转换器异常,openoffice服务未启动!****"
);
throw
e;
}
catch
(com.artofsolving.jodconverter.openoffice.connection.OpenOfficeException e) {
e.printStackTrace();
System.out.println(
"****swf转换器异常,读取转换文件失败****"
);
throw
e;
}
catch
(Exception e) {
e.printStackTrace();
throw
e;
}
}
else
{
System.out.println(
"****已经转换为pdf,不需要再进行转化****"
);
}
}
else
{
System.out.println(
"****swf转换器异常,需要转换的文档不存在,无法转换****"
);
}
}
/**
* 转换成 swf
*/
@SuppressWarnings
(
"unused"
)
private
void
pdf2swf()
throws
Exception {
Runtime r = Runtime.getRuntime();
if
(!swfFile.exists()) {
if
(pdfFile.exists()) {
if
(environment ==
1
) {
// windows环境处理
try
{
Process p = r.exec(
"D:/Program Files/SWFTools/pdf2swf.exe "
+ pdfFile.getPath() +
" -o "
+ swfFile.getPath() +
" -T 9"
);
System.out.print(loadStream(p.getInputStream()));
System.err.print(loadStream(p.getErrorStream()));
System.out.print(loadStream(p.getInputStream()));
System.err.println(
"****swf转换成功,文件输出:"
+ swfFile.getPath() +
"****"
);
if
(pdfFile.exists()) {
pdfFile.delete();
}
}
catch
(IOException e) {
e.printStackTrace();
throw
e;
}
}
else
if
(environment ==
2
) {
// linux环境处理
try
{
Process p = r.exec(
"pdf2swf "
+ pdfFile.getPath()
+
" -o "
+ swfFile.getPath() +
" -T 9"
);
System.out.print(loadStream(p.getInputStream()));
System.err.print(loadStream(p.getErrorStream()));
System.err.println(
"****swf转换成功,文件输出:"
+ swfFile.getPath() +
"****"
);
if
(pdfFile.exists()) {
pdfFile.delete();
}
}
catch
(Exception e) {
e.printStackTrace();
throw
e;
}
}
}
else
{
System.out.println(
"****pdf不存在,无法转换****"
);
}
}
else
{
System.out.println(
"****swf已经存在不需要转换****"
);
}
}
static
String loadStream(InputStream in)
throws
IOException {
int
ptr =
0
;
in =
new
BufferedInputStream(in);
StringBuffer buffer =
new
StringBuffer();
while
((ptr = in.read()) != -
1
) {
buffer.append((
char
) ptr);
}
return
buffer.toString();
}
/**
* 转换主方法
*/
@SuppressWarnings
(
"unused"
)
public
boolean
conver() {
if
(swfFile.exists()) {
System.out.println(
"****swf转换器开始工作,该文件已经转换为swf****"
);
return
true
;
}
if
(environment ==
1
) {
System.out.println(
"****swf转换器开始工作,当前设置运行环境windows****"
);
}
else
{
System.out.println(
"****swf转换器开始工作,当前设置运行环境linux****"
);
}
try
{
doc2pdf();
pdf2swf();
}
catch
(Exception e) {
e.printStackTrace();
return
false
;
}
if
(swfFile.exists()) {
return
true
;
}
else
{
return
false
;
}
}
/**
* 返回文件路径
*
* @param s
*/
public
String getswfPath() {
if
(swfFile.exists()) {
String tempString = swfFile.getPath();
tempString = tempString.replaceAll(
"\\\\"
,
"/"
);
return
tempString;
}
else
{
return
""
;
}
}
/**
* 设置输出路径
*/
public
void
setOutputPath(String outputPath) {
this
.outputPath = outputPath;
if
(!outputPath.equals(
""
)) {
String realName = fileName.substring(fileName.lastIndexOf(
"/"
),
fileName.lastIndexOf(
"."
));
if
(outputPath.charAt(outputPath.length()) ==
'/'
) {
swfFile =
new
File(outputPath + realName +
".swf"
);
}
else
{
swfFile =
new
File(outputPath + realName +
".swf"
);
}
}
}
}
|
6.部署发布 。
启动tomcat,部署当前web应用 。
地址栏输入http://localhost:8080/ctcesims/documentUpload.jsp 如下图:
单击预览按钮,就会生成预览界面,如下图:
4.常见问题 。
若出现swf无法预览,请访问 。
http://www.macromedia.com/support/documentation/en/flashplayer/help/settings_manager04a.html#119065 。
将生成swf的文件夹设置为信任文件位置。 以下给出 flexpaper 2.1.9 的不同之处:初始化方式改变,若文件目录与项目目录不在一起,可将附件目录在服务器中设置为虚拟目录 。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
|
<%@ page language=
"java"
contentType=
"text/html; charset=UTF-8"
pageEncoding=
"UTF-8"
%>
<%
//String swfFilePath=session.getAttribute("swfpath").toString();
%>
<!DOCTYPE html PUBLIC
"-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd"
>
<html>
<head>
<meta http-equiv=
"Content-Type"
content=
"text/html; charset=UTF-8"
>
<script type=
"text/javascript"
src=
"js/jquery.min.js"
></script>
<script type=
"text/javascript"
src=
"js/flexpaper.js"
></script>
<script type=
"text/javascript"
src=
"js/flexpaper_handlers.js"
></script>
<style type=
"text/css"
media=
"screen"
>
html, body { height:
100
%; }
body { margin:
0
; padding:
0
; overflow:auto; }
#flashContent { display:none; }
</style>
<title>文档在线预览系统</title>
</head>
<body>
<div style=
"position:absolute;left:50px;top:10px;"
>
<div id=
"documentViewer"
class
=
"flexpaper_viewer"
style=
"width:770px;height:500px"
></div>
<script type=
"text/javascript"
>
var startDocument =
"Paper"
;
$(
'#documentViewer'
).FlexPaperViewer(
{ config : {
SWFFile :
'upload/ddd3.swf'
,
Scale :
0.6
,
ZoomTransition :
'easeOut'
,
ZoomTime :
0.5
,
ZoomInterval :
0.2
,
FitPageOnLoad :
true
,
FitWidthOnLoad :
false
,
FullScreenAsMaxWindow :
false
,
ProgressiveLoading :
false
,
MinZoomSize :
0.2
,
MaxZoomSize :
5
,
SearchMatchAll :
false
,
InitViewMode :
'Portrait'
,
RenderingOrder :
'flash'
,
StartAtPage :
''
,
ViewModeToolsVisible :
true
,
ZoomToolsVisible :
true
,
NavToolsVisible :
true
,
CursorToolsVisible :
true
,
SearchToolsVisible :
true
,
WMode :
'window'
,
localeChain:
'en_US'
}}
);
</script>
</div>
</body>
</html>
|
最后,若需要去除打印功能及logo,可重新编译 flexpaper 的 flash文件,网上也有下载 。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我.
最后此篇关于java实现附件预览(openoffice+swftools+flexpaper)实例的文章就讲到这里了,如果你想了解更多关于java实现附件预览(openoffice+swftools+flexpaper)实例的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
我正在编写一个具有以下签名的 Java 方法。 void Logger(Method method, Object[] args); 如果一个方法(例如 ABC() )调用此方法 Logger,它应该
我是 Java 新手。 我的问题是我的 Java 程序找不到我试图用作的图像文件一个 JButton。 (目前这段代码什么也没做,因为我只是得到了想要的外观第一的)。这是我的主课 代码: packag
好的,今天我在接受采访,我已经编写 Java 代码多年了。采访中说“Java 垃圾收集是一个棘手的问题,我有几个 friend 一直在努力弄清楚。你在这方面做得怎么样?”。她是想骗我吗?还是我的一生都
我的 friend 给了我一个谜语让我解开。它是这样的: There are 100 people. Each one of them, in his turn, does the following
如果我将使用 Java 5 代码的应用程序编译成字节码,生成的 .class 文件是否能够在 Java 1.4 下运行? 如果后者可以工作并且我正在尝试在我的 Java 1.4 应用程序中使用 Jav
有关于why Java doesn't support unsigned types的问题以及一些关于处理无符号类型的问题。我做了一些搜索,似乎 Scala 也不支持无符号数据类型。限制是Java和S
我只是想知道在一个 java 版本中生成的字节码是否可以在其他 java 版本上运行 最佳答案 通常,字节码无需修改即可在 较新 版本的 Java 上运行。它不会在旧版本上运行,除非您使用特殊参数 (
我有一个关于在命令提示符下执行 java 程序的基本问题。 在某些机器上我们需要指定 -cp 。 (类路径)同时执行java程序 (test为java文件名与.class文件存在于同一目录下) jav
我已经阅读 StackOverflow 有一段时间了,现在我才鼓起勇气提出问题。我今年 20 岁,目前在我的家乡(罗马尼亚克卢日-纳波卡)就读 IT 大学。足以介绍:D。 基本上,我有一家提供簿记应用
我有 public JSONObject parseXML(String xml) { JSONObject jsonObject = XML.toJSONObject(xml); r
我已经在 Java 中实现了带有动态类型的简单解释语言。不幸的是我遇到了以下问题。测试时如下代码: def main() { def ks = Map[[1, 2]].keySet()
一直提示输入 1 到 10 的数字 - 结果应将 st、rd、th 和 nd 添加到数字中。编写一个程序,提示用户输入 1 到 10 之间的任意整数,然后以序数形式显示该整数并附加后缀。 public
我有这个 DownloadFile.java 并按预期下载该文件: import java.io.*; import java.net.URL; public class DownloadFile {
我想在 GUI 上添加延迟。我放置了 2 个 for 循环,然后重新绘制了一个标签,但这 2 个 for 循环一个接一个地执行,并且标签被重新绘制到最后一个。 我能做什么? for(int i=0;
我正在对对象 Student 的列表项进行一些测试,但是我更喜欢在 java 类对象中创建硬编码列表,然后从那里提取数据,而不是连接到数据库并在结果集中选择记录。然而,自从我这样做以来已经很长时间了,
我知道对象创建分为三个部分: 声明 实例化 初始化 classA{} classB extends classA{} classA obj = new classB(1,1); 实例化 它必须使用
我有兴趣使用 GPRS 构建车辆跟踪系统。但是,我有一些问题要问以前做过此操作的人: GPRS 是最好的技术吗?人们意识到任何问题吗? 我计划使用 Java/Java EE - 有更好的技术吗? 如果
我可以通过递归方法反转数组,例如:数组={1,2,3,4,5} 数组结果={5,4,3,2,1}但我的结果是相同的数组,我不知道为什么,请帮助我。 public class Recursion { p
有这样的标准方式吗? 包括 Java源代码-测试代码- Ant 或 Maven联合单元持续集成(可能是巡航控制)ClearCase 版本控制工具部署到应用服务器 最后我希望有一个自动构建和集成环境。
我什至不知道这是否可能,我非常怀疑它是否可能,但如果可以,您能告诉我怎么做吗?我只是想知道如何从打印机打印一些文本。 有什么想法吗? 最佳答案 这里有更简单的事情。 import javax.swin
我是一名优秀的程序员,十分优秀!