import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.util.*;
import
import javax.swing.event.*;
public class Application1 extends JFrame {
String filepath="";
JLabel splitSourceSize,coalitionTotalSize,coalitionTotalCount;
JTextField SplitSource,SplitTotalCount,SplitEachSize,coalitionSource;
//*****************************************申明结束
public Application1() {
super("工具");
this.setSize(640,480);
this.setLocation(this.getToolkit().getScreenSize().width/2-this.getWidth()/2,th is.getToolkit().getScreenSize().height/2-this.getHeight()/2);
JPanel contentPanel=(JPanel)this.getContentPane();
contentPanel.setLayout(new BorderLayout());
JTabbedPane jtp=new JTabbedPane();
jtp.setTabLayoutPolicy(JTabbedPane.SCROLL_TAB_LAYOUT);
JPanel splitPane=new JPanel(new GridLayout(5,1));
JPanel splitPane0=new JPanel(new BorderLayout());
splitPane0.add(splitPane,BorderLayout.NORTH);
JPanel splitPane1=new JPanel(new FlowLayout(FlowLayout.LEADING));
JPanel splitPane2=new JPanel(new FlowLayout(FlowLayout.LEADING));
JPanel splitPane3=new JPanel(new FlowLayout(FlowLayout.LEADING));
JPanel splitPane4=new JPanel(new FlowLayout(FlowLayout.LEADING));
JPanel splitPane5=new JPanel();
splitPane1.add(new JLabel("拆分源文件:"));
SplitSource=new JTextField(40);
splitPane1.add(SplitSource);
JButton SplitJButton=new JButton("浏览...");
SplitJButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
SplitJButtonClick(e);//选择要拆分的文件
}
});
splitPane1.add(SplitJButton);
splitSourceSize=new JLabel("源文件大小:");
splitPane2.add(splitSourceSize);
splitPane3.add(new JLabel("拆分的数目:"));
SplitTotalCount=new JTextField(15);
SplitTotalCount.setDocument(new NumberDocument());//限制输入框只能输入数字SplitTotalCount.getDocument().addDocumentListener(new DocumentListener() {//给输入框添加事件
public void changedUpdate(DocumentEvent e) {
if(!Application1.this.SplitTotalCount.isFocusOwner())return;
try{SplitTotalCount_changedUpdate(e);}catch(Exception
ex){System.err.println(ex.toString());}
}
public void insertUpdate(DocumentEvent e) {
if(!Application1.this.SplitTotalCount.isFocusOwner())return;
try{SplitTotalCount_changedUpdate(e);}catch(Exception
ex){System.err.println(ex.toString());}
}
public void removeUpdate(DocumentEvent e) {
if(!Application1.this.SplitTotalCount.isFocusOwner())return;
try{SplitTotalCount_changedUpdate(e);}catch(Exception
ex){System.err.println(ex.toString());}
}
});
splitPane3.add(SplitTotalCount);
splitPane4.add(new JLabel("单文件大小:"));
SplitEachSize=new JTextField(15);
SplitEachSize.setDocument(new NumberDocument());//限制输入框只能输入数字SplitEachSize.getDocument().addDocumentListener(new DocumentListener() {//给输入框添加事件
public void changedUpdate(DocumentEvent e) {
if(!Application1.this.SplitEachSize.isFocusOwner())return;
try{SplitEachSize_changedUpdate(e);}catch(Exception
ex){System.err.println(ex.toString());}
}
public void insertUpdate(DocumentEvent e) {
if(!Application1.this.SplitEachSize.isFocusOwner())return;
try{SplitEachSize_changedUpdate(e);}catch(Exception
ex){System.err.println(ex.toString());}
}
public void removeUpdate(DocumentEvent e) {
if(!Application1.this.SplitEachSize.isFocusOwner())return;
try{SplitEachSize_changedUpdate(e);}catch(Exception
ex){System.err.println(ex.toString());}
}
});
splitPane4.add(SplitEachSize);
JButton SplitJB=new JButton("开始拆分");
SplitJB.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
try{SplitJBClick(e);}catch(Exception
ex){System.err.println(ex.toString());}// href="index.php?op=article&action=keyword&keyword=拆分文件">拆分文件
});
splitPane5.add(SplitJB);
splitPane.add(splitPane1);
splitPane.add(splitPane2);
splitPane.add(splitPane3);
splitPane.add(splitPane4);
splitPane.add(splitPane5);
JPanel coalitionPane0=new JPanel(new BorderLayout());
JPanel coalitionPane=new JPanel(new GridLayout(4,1));
coalitionPane0.add(coalitionPane,BorderLayout.NORTH);
JPanel coalitionPane1=new JPanel(new FlowLayout(FlowLayout.LEADING)); JPanel coalitionPane2=new JPanel(new FlowLayout(FlowLayout.LEADING)); JPanel coalitionPane3=new JPanel(new FlowLayout(FlowLayout.LEADING)); JPanel coalitionPane4=new JPanel();
coalitionPane1.add(new JLabel("合并首文件:"));
coalitionSource=new JTextField(40);
coalitionPane1.add(coalitionSource);
JButton coalitionJButton=new JButton("浏览(*.000)");
coalitionJButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
coalitionJButtonClick(e);//选择要合并的首文件
}
});
coalitionPane1.add(coalitionJButton);
coalitionPane.add(coalitionPane1);
coalitionTotalSize=new JLabel("文件总大小:");
coalitionPane2.add(coalitionTotalSize);
coalitionPane.add(coalitionPane2);
coalitionTotalCount=new JLabel("文件总数目:");
coalitionPane3.add(coalitionTotalCount);
coalitionPane.add(coalitionPane3);
JButton coalitionJB=new JButton("开始合并");
coalitionJB.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
try{coalitionJBClick(e);}catch(Exception
ex){System.err.println(ex.toString());}// href="index.php?op=article&action=keyword&keyword=合并文件">合并文件
}
});
coalitionPane4.add(coalitionJB);
coalitionPane.add(coalitionPane4);
jtp.add("拆分文件",splitPane0);
jtp.add("合并文件",coalitionPane0);
contentPanel.add(jtp,BorderLayout.CENTER);
this.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
System.exit(0);//当关闭窗口时退出系统
}
});
this.setVisible(true);
//********************************************以上为图形界面设计
}
private void SplitJBClick(ActionEvent e) throws Exception {//拆分文件操作
File file=new File(this.SplitSource.getText());
if(!file.exists()) {
JOptionPane.showMessageDialog(this,"源文件不存在!","警告
",JOptionPane.WARNING_MESSAGE);
return;
}
javax.swing.JFileChooser fjc;
fjc=new javax.swing.JFileChooser(filepath);
fjc.removeChoosableFileFilter(fjc.getAcceptAllFileFilter());
fjc.setDialogTitle("选择保存目录");
fjc.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
if(fjc.APPROVE_OPTION!=fjc.showOpenDialog(this))return;
filepath=fjc.getSelectedFile().getPath();
byte[] b=new byte[1024];
int read=0;
String splitfilename=file.getName();
int eachfilesize=Integer.parseInt(this.SplitEachSize.getText());
FileInputStream fis=new FileInputStream(file);
FileOutputStream fos;
String savesplitfilename="";
for(long
splitcount=0;splitcount savesplitfilename=fjc.getSelectedFile()+"/"+splitfilename+".xiruo."; if(String.valueOf(splitcount).length()==1) savesplitfilename+="00"+splitcount; else if(String.valueOf(splitcount).length()==2) savesplitfilename+="0"+splitcount; else savesplitfilename+=splitcount; fos=new FileOutputStream(savesplitfilename); int eachread=b.length; int hasread=0; while((read=fis.read(b,0,eachread))>0) { fos.write(b,0,read); fos.flush(); hasread+=read; if(hasread>=eachfilesize&&splitcount!=Long.parseLong(this.SplitTotalCount .getText())-1) break; if(eachfilesize-hasread<(long)b.length) eachread=eachfilesize-hasread; } fos.close(); } fos=null; JOptionPane.showMessageDialog(this,"拆分完成"); } private void coalitionJBClick(ActionEvent e) throws Exception {//合并文件操作 File file=new File(this.coalitionSource.getText()); if(!file.exists()) { JOptionPane.showMessageDialog(this,"源文件不存在!","警告 ",JOptionPane.WARNING_MESSAGE); return; } javax.swing.JFileChooser fjc; fjc=new javax.swing.JFileChooser(filepath); fjc.setDialogTitle("选择保存目录"); fjc.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY); if(fjc.APPROVE_OPTION!=fjc.showOpenDialog(this))return; filepath=fjc.getSelectedFile().getPath(); String selfilename=file.getName(); selfilename=selfilename.substring(0,https://www.doczj.com/doc/8b17016579.html,stIndexOf(".")); String savefile=fjc.getSelectedFile().getAbsolutePath()+"/"+selfilename.substring(0,se https://www.doczj.com/doc/8b17016579.html,stIndexOf(".")); if(new File(savefile).exists()) { int javaok=JOptionPane.showConfirmDialog(this,"文件名 "+new File(savefile).getName()+" 的文件已经存在,你要覆盖原来的文件吗?","警告! ",JOptionPane.OK_CANCEL_OPTION); if(javaok==JOptionPane.CANCEL_OPTION)return; } byte[] b=new byte[1024]; int read=0; FileOutputStream fos=new FileOutputStream(savefile); FileInputStream fis; File[] f=file.getParentFile().listFiles(); for(int i=0;i if(!f[i].getName().startsWith(selfilename))continue; fis=new FileInputStream(f[i]); while((read=fis.read(b,0,b.length))>0) { fos.write(b, 0, read); fos.flush(); } fis.close(); } fos.close(); fos=null; fis=null; JOptionPane.showMessageDialog(this,"合并完成"); } private void SplitTotalCount_changedUpdate(DocumentEvent e) throws Exception { File file=new File(this.SplitSource.getText()); if(!file.exists()||this.SplitTotalCount.getText().equals(""))return; long l=Long.parseLong(this.SplitTotalCount.getText()); if(l<=0)return; this.SplitEachSize.setText(String.valueOf(file.length()/l)); } private void SplitEachSize_changedUpdate(DocumentEvent e) throws Exception { File file=new File(this.SplitSource.getText()); if(!file.exists()||this.SplitEachSize.getText().equals(""))return; double l=Double.parseDouble(this.SplitEachSize.getText()); if(l<=0)return; this.SplitTotalCount.setText(fileCount((double)file.length(),l)); } private void SplitJButtonClick(ActionEvent e) {//选择要拆分的源文件 javax.swing.JFileChooser fjc; fjc=new javax.swing.JFileChooser(filepath); fjc.addChoosableFileFilter(new myFilter("*.jpg,*.gif","jpg,gif Files(*.jpg,*.gif)"));//文件过滤 fjc.addChoosableFileFilter(new myFilter("*.rm,*.rmvb","real Files(*.rm,*.rmvb)"));//文件过滤 fjc.addChoosableFileFilter(new myFilter("*.mpg,*.mpeg","mpg Files(*.mpg,*.mpeg)"));//文件过滤 fjc.addChoosableFileFilter(fjc.getAcceptAllFileFilter()); if(fjc.APPROVE_OPTION!=fjc.showOpenDialog(this))return; filepath=fjc.getSelectedFile().getPath(); File file=fjc.getSelectedFile(); double filesize=file.length(); String size=""; java.text.DecimalFormat df=new java.text.DecimalFormat("#.##"); if(filesize>=1024d*1024d*0.8d) size=df.format(filesize/(1024d*1024d))+"MB"; else if(filesize>=1024d*0.8d) size=df.format(filesize/1024d)+"KB"; else size=filesize+"Bytes"; this.splitSourceSize.setText("源文件大小: "+size); this.SplitSource.setText(file.getAbsolutePath()); this.SplitTotalCount.setText(fileCount(filesize,102400)); this.SplitEachSize.setText("102400"); } private void coalitionJButtonClick(ActionEvent e) {//选择要合并的首文件 javax.swing.JFileChooser fjc; fjc=new javax.swing.JFileChooser(filepath); fjc.removeChoosableFileFilter(fjc.getAcceptAllFileFilter());//移除默认的select All fjc.addChoosableFileFilter(new myFilter("*.xiruo.000","拆分首文件 (*.xiruo.000)"));//文件过滤 if(fjc.APPROVE_OPTION!=fjc.showOpenDialog(this))return; filepath=fjc.getSelectedFile().getPath(); File file=fjc.getSelectedFile(); String selfilename=file.getName(); this.coalitionSource.setText(file.getAbsolutePath()); selfilename=selfilename.substring(0,https://www.doczj.com/doc/8b17016579.html,stIndexOf(".")); File[] f=file.getParentFile().listFiles(); double filesize=0; int filetotalcount= 0; for(int i=0;i if(!f[i].getName().startsWith(selfilename))continue; filetotalcount++; filesize+=f[i].length(); } String size=""; java.text.DecimalFormat df=new java.text.DecimalFormat("#.##"); if(filesize>=1024d*1024d*0.8d) size=df.format(filesize/(1024d*1024d))+"MB"; else if(filesize>=1024d*0.8d) size=df.format(filesize/1024d)+"KB"; else size=filesize+"Bytes"; this.coalitionTotalSize.setText("文件总大小: "+size); this.coalitionTotalCount.setText("文件总数目: "+filetotalcount); } private String fileCount(double filesize,double eachsize) { int i=(int)(filesize/eachsize)+(filesize%eachsize>0?1:0); return String.valueOf(i); } public class NumberDocument extends PlainDocument {//对文本框的输入进行输入限制,构造PlainDocument实现 public void insertString(int offs, String str, AttributeSet a) throws BadLocationException { char[] source = str.toCharArray(); char[] result = new char[source.length]; int j = 0; for (int i = 0; i < result.length; i++) { if (Character.isDigit(source[i])) result[j++] = source[i]; } super.insertString(offs, new String(result, 0, j), a); } } public static void main(String args[]) throws Exception { Font font=new Font("宋体",Font.PLAIN,15); UIManager.put("Button.font",font); UIManager.put("ToggleButton.font",font); UIManager.put("RadioButton.font",font); UIManager.put("CheckBox.font",font); UIManager.put("ColorChooser.font",font); UIManager.put("ToggleButton.font",font); UIManager.put("ComboBox.font",font); UIManager.put("ComboBoxItem.font",font); UIManager.put("InternalFrame.titleFont",font); UIManager.put("Label.font",font); UIManager.put("List.font",font); UIManager.put("MenuBar.font",font); UIManager.put("Menu.font",font); UIManager.put("MenuItem.font",font); UIManager.put("RadioButtonMenuItem.font",font); UIManager.put("CheckBoxMenuItem.font",font); UIManager.put("PopupMenu.font",font); UIManager.put("OptionPane.font",font); UIManager.put("Panel.font",font); UIManager.put("ProgressBar.font",font); UIManager.put("ScrollPane.font",font); UIManager.put("Viewport",font); UIManager.put("TabbedPane.font",font); UIManager.put("TableHeader.font",font); UIManager.put("TextField.font",font); UIManager.put("PasswordFiled.font",font); UIManager.put("TextArea.font",font); UIManager.put("TextPane.font",font); UIManager.put("EditorPane.font",font); UIManager.put("TitledBorder.font",font); UIManager.put("ToolBar.font",font); UIManager.put("ToolTip.font",font); UIManager.put("Tree.font",font);//以上设置是为了解决中文问题 UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());//设置可视风格 new Application1(); } } //************************************************文件选择过滤器 class myFilter extends javax.swing.filechooser.FileFilter { String extension="",description=""; public myFilter(String extension,String description) { if(extension!=null)this.extension=extension; if(description!=null)this.description=description; } public String getDescription() { return this.description; } public boolean accept(File file) { if(file.isDirectory()||extension.equals("")) return true; String[] s=extension.replaceAll("[*]","").split("[,]"); for(int i=0;i if(file.getName().toLowerCase().endsWith(s[i].toLowerCase())) { return true; } } return false; } } 相信随着短视频的兴起不少小伙伴喜欢利用一些空余之间去‘造’一些视频,视频的制作也可以简化为分割、合并、特效等多种形式。但是相比之下一些简单的视频合并或分割显然会更符合新手的‘口味’,而要想将多个视频合并到一起通常会使用一些视频格式转换软件进行。接下来就分享合并视频的方法给小伙伴们参考。 步骤一:了解工具 在视频合并前需要选择一个适合自己的视频格式转换软件,这类工具也有不少,小编则利用自身较为习惯的迅捷视频转换器进行。在拿到软件后看到工具有视频转换、分割和合并等十种视频处理方式,可以随意点击按钮去了解工具。 二:选择功能并导入视频 大致对软件有所了解后,由于只需进行视频合并操作因此视频合并以外别的功能都不是我们要的。所以要点击视频合并功能跳转到相应界面,并且通过任意添加 方式导入需要合并的3个视频文件(如果想合并更多视频文件也可以按需导入)。 三:调整顺序与裁剪视频 将需要合并的视频导入到指定区域后可以看到相关的缩略图,由于软件会根据从上到下的顺序依次合并,如果想调整顺序那么通过上移/下移按钮进行即可。与此同时如果有某个或某几个视频不想整段进行转换也可以通过‘视频裁剪’按钮根据随后出现的设置框进行调整。 四:输出格式和相关参数 紧接着我们看到输出格式、输出视频名称、输出目录和任务完成后四处参数,分 别代表着视频合并过程中导出的格式、视频合并后保存的文件名称、视频合并后文件保存到电脑的位置和视频合并完成后软件的状态。这些参数根据自己的需要酌情设定即可。 五:合并视频 当了解完视频格式转换软件且相应的合并文件添加并设定好相关参数后,点击开始合并按钮,接下来会出现一个合并中的进度条,当视频合并完成后会出现提示框,这时点击‘打开’按钮即可到达视频合并所在位置。当然了你也可以直接通过输出目录所在位置去查阅视频文件。 在Struts 2中实现文件上传 前一阵子有些朋友在电子邮件中问关于Struts 2实现文件上传的问题,所以今天我们就来讨论一下这个问题。 实现原理 Struts 2是通过Commons FileUpload文件上传。Commons FileUpload通过将HTTP的数据保存到临时文件夹,然后Struts使用fileUpload拦截器将文件绑定到Action的实例中。从而我们就能够以本地文件方式的操作浏览器上传的文件。 具体实现 前段时间Apache发布了Struts 2.0.6 GA,所以本文的实现是以该版本的Struts 作为框架的。以下是例子所依赖类包的列表: 清单1 依赖类包的列表 首先,创建文件上传页面FileUpload.jsp,内容如下: <% @ page language = " java " contentType = " text/html; charset=utf-8 " pageEncodi ng = " utf-8 " %> <% @ taglib prefix = " s " uri = " /struts-tags " %> 利用VBA实现Word文档的批量拆分与合并本文作者(范晓燕,周涛峰),请您在阅读本文时尊重作者版权。 利用VBA实现Word文档的批量拆分与合并 摘要:介绍了利用VBA实现Word文件批量合并与拆分的方法和技术,并给出了关键代码,通过该方法,可以快速处理大量文档,实现文档的批量合并与拆分,可以大幅提高日常工作效率。 关键词:Word VBA;批量;合并与拆分Word Document Using VBA to Achieve Mass Split and Merge FAN Xiao-yan1,2, ZHOU Tao-feng3 (1.School of Optoelectronic Information and Computer Engineering, University of Shanghai for Scince and Technology, Shanghai 200093, China; https://www.doczj.com/doc/8b17016579.html,puter Application school, Shanghai Technical Institute of Electronics Information, Shanghai 201411, China; 3.School of Fisheries and Life, Shanghai Ocean University, Shanghai 201306, China) Abstract: Description Word document using VBA to achieve combined with the split-volume methods and techniques, and the key code is given by this method, you can quickly handle a large number of documents for document merging and splitting volume, can significantly improve the efficiency of daily work. Key words: word VBA; volume; merger and split 微软公司的Word是使用范围非常广的办公软件,具有强大的编辑功能,可以编辑文字、图形、图像、声音、动画,还可以插入其它软件制作的对象,能够满足用户的各种文档处理要求,为日常办公带来了极大的方便。 VBA是微软公司在Office产品中提供的程序设计语言和环境,它是Office功能的扩展,可以实现Office功能的二次开发,尤其在处理大量重复性工作时,VBA显得异常强大,可以成倍提高工作效率。 1 问题的提出 日常办公中,经常需要处理Word文件,当文件数量较少、文件体积较小时可以轻松应对,但当文件数量较多、文件体积较大时,操作起来就要花费大量的时间和精力,而且很容易出错。 比如,每年年末,公司所有员工都要交工作总结,人事部门需要将所有人的总结汇总到一个文件里,以便向总经理汇报。再比如,每年年末,公司要将每个员工的工作业绩发给他们本人,而公司业绩管理系统导出的文件中,所有人都在同一个Word文件里,需要将他们一一拆分出来。 视频网站中提供的在线视频播放功能,播放的都是FLV格式的文件,它是Flash动画文件,可通过Flash 制作的播放器来播放该文件.项目中用制作的播放器. 多媒体视频处理工具FFmpeg有非常强大的功能包括视频采集功能、视频格式转换、视频抓图、给视频加水印等。?? ffmpeg视频采集功能非常强大,不仅可以采集视频采集卡或USB摄像头的图像,还可以进行屏幕录制,同时还支持以RTP方式将视频流传送给支持RTSP的流媒体服务器,支持直播应用。 1.能支持的格式 ffmpeg能解析的格式:(asx,asf,mpg,wmv,3gp,mp4,mov,avi,flv等) 2.不能支持的格式 对ffmpeg无法解析的文件格式(wmv9,rm,rmvb等),可以先用别的工具(mencoder)转换为avi(ffmpeg 能解析的)格式. 实例是将上传视频转码为flv格式,该格式ffmpeg支持,所以我们实例中需要ffmpeg视频处理工具. 数据库 实例所需要的数据库脚本 drop database if exists db_mediaplayer;create database db_mediaplayer;use db_mediaplayer; create table tb_media( id int not null primary key auto_increment comment '主键' , title varchar(50) not null comment '视频名称' , src varchar(200) not null comment '视频存放地址' , picture varchar(200) not null comment '视频截图' , descript varchar(400) comment '视频描述' , uptime varchar(40) comment '上传时间' ); 实验1、2:线性表的应用参考代码 一、实验预备知识 1.复习C中编写函数的相关内容。 2.复习如何用主函数将多个函数连在一起构成一个C完整程序。 二、实验目的 1.掌握线性表的顺序和链式存储结构 2.熟练运用线性表在顺序存储方式下的初始化、创建、输出、插入和删除运算 3.熟练运用线性表在链式存储方式下的创建、输出、插入和删除运算 三、实验要求 1.编写初始化并创建线性表和输出线性表的算法。 2.编写对线性表插入和删除运算算法,要判断位置的合法性和溢出问题。 3.编写有序表的插入和删除运算算法。 4.编写一个主函数,将上面函数连在一起,构成一个完整的程序。 5.将实验源程序调试并运行,写出输入、输出结果,并对结果进行分析。 四、实验内容 顺序表实验内容: 1.给定的线性表为L=(12,25,7,42,19,38),元素由键盘输入。 2.初始化并建立顺序表。(开辟的存储空间大小为8) 3.编写顺序表输出算法。 4.依次插入3、21、15、99四个数,分别插入在第1、8、4和12位置,每插入一次都要输出一次顺序表。 5.删除第1,第9和第12个位置上的元素,每删除一个元素都要输出一次顺序表。 6.编写一个排序算法,对线性表中元素从小到大排列。 7.向有序表分别插入20和50,插入后表仍然有序。(修改开辟的存储空间大小为15) 单链表实验内容: 1.给定的线性表为L=(12,25,7,42,19,38),元素由键盘输入。 2.建立一个带表头结点的单链表(前插入法和尾插入法均可)。 3.编写单链表输出算法。 4.依次插入3、21、15、99四个数,分别插入在第1、8、4和12位置,每插入一次都要输出一次单链表。 5.删除第1,第9和第12个位置上的元素,每删除一个元素都要输出一次单链表。 6.编写一个排序算法,对链表中元素从小到大排列。 7.向有序链表分别插入20和50,插入后表仍然有序。 五、实验结果 顺序表源程序: #include ? 一个通用的Java文件上传类,支持上传图片,支持生成缩略图,设置最大上传文件字节数,不设置时默认10M,可接收来自表单的数据,当有多个文件域时, 只上传有文件的,忽略其他不是文件域的所有表单信息,支持用户对上传文件大小, 字节进行设置,本上传类可过滤掉以下文件类型:".exe", ".com", ".cgi", ".asp", ".php", ".jsp"等,你可自已添加过滤的文件后缀,上传文件时如果没有上传目录,则自动创建它。。。 ? package com.gootrip.util; import java.io.File; import java.util.*; import https://www.doczj.com/doc/8b17016579.html,mons.fileupload.*; import javax.servlet.http.HttpServletRequest; import java.util.regex.Pattern; import java.io.IOException; import https://www.doczj.com/doc/8b17016579.html,mons.fileupload.servlet.ServletFileUpload; import https://www.doczj.com/doc/8b17016579.html,mons.fileupload.disk.DiskFileItemFactory; import java.util.regex.Matcher; /** * TODO 要更改此生成的类型注释的模板,请转至 * 窗口-首选项- Java -代码样式-代码模板 */ public class FileUploadUtil { //当上传文件超过限制时设定的临时文件位置,注意是绝对路径 private String tempPath = null; //文件上传目标目录,注意是绝对路径 private String dstPath = null; //新文件名称,不设置时默认为原文件名 private String newFileName = null; //获取的上传请求 private HttpServletRequest fileuploadReq = null; //设置最多只允许在内存中存储的数据,单位:字节,这个参数不要设置太大 private int sizeThreshold = 4096; //设置允许用户上传文件大小,单位:字节 //共10M private long sizeMax = 10485760; //图片文件序号 private int picSeqNo = 1; private boolean isSmallPic = false; public FileUploadUtil(){ } public FileUploadUtil(String tempPath, String destinationPath){ this.tempPath = tempPath; this.dstPath = destinationPath; } 实验有序表合并姓名:窦晓磊班级:软件工程142 学号:1413032042 试验时间:2015.10.11 1.问题描述 把两个有序表归并为一个有序表。 2.数据结构设计 链表结点的结构为: Typedef struct Node{ T data; Node *next; }; 3.算法设计 (1)表的输入和输出。 设计一个输入输出函数Node *CreateList()。 Step1:设计指针。 Node *q, //工作指针,存储head *Head, //头指针 *p; //工作指针,存储数据 int size, //用于存储有序表元素的个数 n; //元素的输入 Step2:利用指针进行输入。 q=Head=new Node; //建立头结点 利用循环输入 for(int i=1;i<=n;i++) { p=new Node; //建立结点 cin>>n; //输入元素 p->data=n; //将输入的元素赋值给链表 Head->next=p; //尾指针后移 Head=p; //指向下一个结点 Head=p; } Head->next=NULL; //设置尾指针 Head=q; Step3:输出。 for(p=Head->next;p!=NULL;p=p->next) cout< 南昌大学实验报告 学生姓名:李木子学号:专业班级:软工实验类型:□验证□综合□设计□创新实验日期:实验成绩: 一、实验项目名称 两个有序顺序表的结合 二、实验目的 顺序表的创建 .实现顺序表的追加 .实现顺序表的显示 .两顺序表的合并 三、实验基本原理 四、主要仪器设备及耗材 电脑, 五、实验步骤 ******************************************* * 顺序表的创建 * * .实现顺序表的追加 * * .实现顺序表的显示 * * .两顺序表的合并 * ******************************************* <> <> ; ************************************ * 顺序表结构体的定义 * ************************************ { []; ; }; ************************************ * 函数声明 * ************************************ (*); (*); (); (); (*); (*); (***); ************************************ * 顺序表的初始化函数 * ************************************ (*) { >; } ************************************ * 顺序表的追加函数 * ************************************ (*) { (>) { ("\顺序表是满的!"); (); } >[>]; >>; } tomcat上传文件下载文件 首先介绍一下我们需要的环境:我用的是myeclipse8.5的java开发环境,tomcat是用的apache-tomcat-6.0.26这个版本。首先先需要准备一下使用到的 jar包 这些jar包是struts2的jar包。这些jar包是都是用于上传文件的。 注意:这里的jar包版本必须是对应的,如不是可能会tomcat下报错。所以大家最好注意一下啊。最好是用这套jar包。我将会在csdn上将项目jar包发上去。 Jar下载地址(0 分):https://www.doczj.com/doc/8b17016579.html,/detail/woaixinxin123/4193113 源代码下载(10分): https://www.doczj.com/doc/8b17016579.html,/detail/woaixinxin123/4193134 开始搭建我们的项目。创建web项目名字为File。 第一步:搭建struts2框架。 1、到jar包。 2、编辑web.xml 实验题目:有序顺序表的合并 一、实验目的 掌握顺序表的基本操作 理解并分析算法的时间复杂度 二、实验内容 实现两个有序(从小到大)顺序表合并成为一个有序顺序表,合并后的结果放在第一个顺序表中(假设这两个有序顺序表中没有相同的元素)。 三、设计与编码 1、基本思想 大体上的方法与“有序顺序表的插入”方法类似。创建两个数组,实现两个有序顺序表。需定义第二个表长length2,逐个将第二个顺序表中的数据与第一个数据表中的数据对比大小,并按大小顺序排列、合并,生成第三个表。最后输出。 2、编码 #include return length; } void SeqList::Insert(int b[],int length2) { int j,h,i=0; for( j=0;j Java实现视频网站的视频上传、视频转码、视频关键帧抽图, 及视频播放功能 视频网站中提供的在线视频播放功能,播放的都是FLV格式的文件,它是Flash动画文件,可通过Flash制作的播放器来播放该文件.项目中用制作的播放器. 多媒体视频处理工具FFmpeg有非常强大的功能包括视频采集功能、视频格式转换、视频抓图、给视频加水印等。?? ffmpeg视频采集功能非常强大,不仅可以采集视频采集卡或USB摄像头的图像,还可以进行屏幕录制,同时还支持以RTP方式将视频流传送给支持RTSP的流媒体服务器,支持直播应用。 1.能支持的格式 ffmpeg能解析的格式:(asx,asf,mpg,wmv,3gp,mp4,mov,avi,flv等) 2.不能支持的格式 对ffmpeg无法解析的文件格式(wmv9,rm,rmvb等),可以先用别的工具(mencoder)转换为avi(ffmpeg能解析的)格式. 实例是将上传视频转码为flv格式,该格式ffmpeg支持,所以我们实例中需要ffmpeg视频处理工具. 数据库 实例所需要的数据库脚本 drop database if exists db_mediaplayer;create database db_mediaplayer;use db_mediaplayer; create table tb_media( id int not null primary key auto_increment comment '主键' , title varchar(50) not null comment '视频名称' , src varchar(200) not null comment '视频存放地址' , picture varchar(200) not null comment '视频截图' , descript varchar(400) comment '视频描述' , uptime varchar(40) comment '上传时间' ); desc tb_media; 数据结构实验报告-顺序表的创建、遍历及有序合并操作二、实验内容与步骤 实现顺序表的创建、遍历及有序合并操作,基本数据结构定义如下: typedef int ElemType; #define MAXSIZE 100 #define FALSE 0 #define TRUE 1 typedef struct {ElemType data[MAXSIZE]; int length; }seqlist; 创建顺序表,遍历顺序表 #include #define TRUE 1 typedef int ElemType; //用户自定义数据元素类型 // 顺序表结构体的定义 typedef struct { ElemType *elem; //顺序表的基地址 int length; //顺序表的当前长度 int listsize; //预设空间容量 }SqList; //线性表的顺序存储结构 SqList* InitList() //创建空的顺序表 { SqList* L = (SqList*)malloc(sizeof(SqList));//定义顺序表L if(!L) { printf("空间划分失败,程序退出\n"); return NULL; } L->elem=(ElemType *)malloc(MAXSIZE*sizeof(ElemType)); if(!L->elem) { printf("空间划分失败,程序退出\n"); Java 读取上传文件里的数据,记事本文件和excel文件 本文,文本文件里的数据,每列以 Tab 分隔。 其它分隔符情况下,只需修改对分隔符的判断即可 本文是将文本文件或excel文件里的数据读到List mkvtoolnix电影合并与分割&字幕和音轨的提取与封装 教程 Mkvtoolnix(又叫Matroska toolkit),是一套功能强大的mkv(Matroska)格式制作和处理的工具,支持将多种视频、音频、字幕等格式封装成mkv格式。Mkvtoolnix 中包含了一个图形界面程序mmg.exe,这样使得制作mkv更简单和直观。还包含MKVextractGUI.exe程序,可以提取MKV 文件里面的音视频和字幕文件。 Mkvtoolnix是目前功能最齐全的Matroska合成器,除了WMV和MPG1/2之外,它几乎能将所有的媒体合成到MKV 中去。 中文名: MKV字幕和音轨的提取与封装软件 英文名: MKVtoolnix 制作发行: DarkDudae and Affar 运行环境:WIN7/VISTA/XP/2003/2000 说明: 1、安装及运行;Mkvtoolnix解压之后,还要将Mkvtoolnix Runtime Package也一并解压到Mkvtoolnix 所在的目录中,否则它是无法运行的。Mkvtoolnix的主程序mkvmerge.exe是命令行程序,不过这个软件包中还提供了一个GUI外壳程序mmg.exe,可运行它来对mkvmerge.exe进行操作。2、文件导入; 运行mmg.exe后,会弹出软件的图形界面,首先选择“Input”选择卡,点击上部“Input files”处的“add”按钮,将要合并的视频、音频、字幕文件一一添加到文件列表中,Mkvtoolnix功能的强大主要体现在能导入的格式上,除了MPEG视频外,几乎所有的主流音、视频格式它都能容纳,包括OGM和MKV格式本身!3、轨道设置;如果视频中已经包括有音频,它还可以选择是保留还是不保留该音频!如果要去掉原有的音频,先在文件列表中选中该视频文件,然后在下面的Tracks列表中将音轨前的勾去掉即可。这样的功能要比OGM方便得多!所有的轨道都可以加上语言类型、标题、作者等标示,先选定某个轨道,然后在下面“Track Options”处的“Language”下拉列表中进行选择。在字幕或声音不同步的情况下,还可设置声轨和字幕播放的延时时间,可将延时数值填入Delay后的文字框(单位为毫秒)。4、文件分割;如果想将合并好的MKV文件刻入光盘,而最终合并好的文件可能超过光盘的容量的话,你可以对文件进行分割。选择“Global(全局)”选项卡,在其中 1.问题描述 设计一个两个顺序表合的程序。根据用户输入的两个顺序表将其合并后并输出;例如:输入:1 2 3和2 3 5合并后得到:1 2 2 3 3 5;输入:1 3 6 9和2 4 7 8得到1 2 3 4 6 7 8 9 2.设计要求 输入的顺序表非递减,输出的顺序表也要非递减 3.数据结构 本课程设计采用顺序表作为实现该问题的数据结构。结构体中含有数组指针和数组长度具体定义如下: typedef struct{ DataType *elem; int length;//顺序表长度 }Seqlist; 4.分析与实现 程序执行包括:构造顺序表,实现顺序表相加; (1)包含必要的头文件 #include 主要方法介绍 上传 // 新建一个SmartUpload对象 SmartUpload su = new SmartUpload(); // 上传初始化 su.initialize(pageContext); // 限制每个上传文件的最大长度。 su.setMaxFileSize(10000); // 限制总上传数据的长度。 su.setTotalMaxFileSize(20000); // 设定允许上传的文件(通过扩展名限制),仅允许doc,txt文件。 su.setAllowedFilesList("doc,txt"); // 设定禁止上传的文件(通过扩展名限制),禁止上传带有exe,bat, //jsp,htm,html扩展名的文件和没有扩展名的文件。 su.setDeniedFilesList("exe,bat,jsp,htm,html,,"); // 上传文件 su.upload(); // 将上传文件全部保存到指定目录 int count = su.save("/upload"); 下载 // 新建一个SmartUpload对象 SmartUpload su = new SmartUpload(); // 初始化 su.initialize(pageContext); // 设定contentDisposition为null以禁止浏览器自动打开文件, //保证点击链接后是下载文件。若不设定,则下载的文件扩展名为 //doc时,浏览器将自动用word打开它。扩展名为pdf时, //浏览器将用acrobat打开。 su.setContentDisposition(null); // 下载文件 su.downloadFile("/upload/test.doc"); ***************************************************************************************************** ***************** 应用实例: 用户只能上传图片格式的文件实例 实验目的及要求: 了解和掌握链表的特点; 掌握链表基本操作的实现; 掌握两个有序链表合并的算法 要求完成链表的初始化、插入、有序表合并、显示操作的实现。实验设备环境及要求: PC机一台,内存要求128M以上,VC++6.0集成开发环境。 实验内容与步骤: 1、在VC++6.0环境中新建一个工程和C++文件; 2、实现链表初始化、插入、有序合并算法,代码如下: #include LinkList p=L->next; if(!p) printf("此链表为空!"); while(p){ printf("%d",p->data); p=p->next; } printf("\n"); } void MergeList_L(LinkList &La,LinkList &Lb,LinkList &Lc){ LinkList pa=La->next; LinkList pb=Lb->next; LinkList pc=Lc=La; while(pa&&pb){ if(pa->data<=pb->data){ pc->next=pa;pc=pa;pa=pa->next; } else{ pc->next=pb;pc=pb;pb=pb->next; } } pc->next=pa?pa:pb; free(Lb); } void main(){ LinkList La,Lb,Lc; InitList_L(La); InitList_L(Lb); InitList_L(Lc); ListInsert_L(La,1,2); ListInsert_L(La,2,3); ListInsert_L(La,3,5); Disp_L(La); ListInsert_L(Lb,1,1); ListInsert_L(Lb,2,4); ListInsert_L(Lb,3,6); ListInsert_L(Lb,4,7); Disp_L(Lb); MergeList_L(La,Lb,Lc); printf("合并之后的链表为:\n"); Disp_L(Lc); }实验指导与数据处理: 实验一顺序表的设计与实现 一.实验目的 1.进一步熟悉VC环境,会在其中编写调试运行c++代码,并理解多文件项目的组织,为以后的实验编程做准备。 2.掌握在VC环境中进行代码的调试 3.掌握顺序表的设计过程,并能通过一实例对设计的顺序表进行测试。 二、实验内容 1.顺序表的设计(Sqlist.h):设计头文件sqlist.h,其内容如下: ①类型设计 ②基本操作的设计(包括初始化、求数据元素个数、插入、删除、取数据元素等) (补充完整) #define LIST_INIT_SIZE 10 #define LIST_INCREMENT 2 //线性表的动态分配顺序存储结构 struct SqList { ElemType *elem; int length; int listsize; }; //顺序表的初始化 void InitList(SqList &L) { //动态分配存储空间,并将分配到的存储空间的首地址保持在顺序表的elem项中 L.elem=(ElemType *)malloc(LIST_INIT_SIZE*sizeof(ElemType)); if(!L.elem) exit(OVERFLOW); //将顺序表的长度初始化为0 L.length=0; //将顺序表的容量初始化为分配的空间数 L.listsize=LIST_INIT_SIZE; } //在线性表的第i个位置上插入数据元素e Status ListInsert(SqList &L,int i,ElemType e) { ElemType *newbase,*q,*p; //判断插入的位置是否合理,不合理则返回错误信息 if(i<1||i>L.length+1) return ERROR; //判断是否有足够的空间插入元素,空间不够则增补空间 if(L.length==L.listsize) { newbase=(ElemType*)realloc(L.elem,(L.listsize+LIST_INCREMENT)*sizeof(ElemType )); if(!newbase) exit(OVERFLOW); L.elem=newbase; L.listsize+=LIST_INCREMENT; } //插入数据元素(先将第i个元素及其后所有元素后移一个位置) q=L.elem+i-1; for(p=L.elem+L.length-1;p>=q;--p) *(p+1)=*p; //将元素e插入到第i个位置 *q=e; //线性表的长度增加1 ++L.length; return OK; } //删除线性表中第i个数据元素 Status ListDelete(SqList &L,int i,ElemType &e) { ElemType *p,*q; //判断删除的元素是否存在,不存在则返回错误信息 if(i<1||i>L.length) return ERROR; //将第i+1个元素及其后所有元素前移一个位置,实现元素的删除 p=L.elem+i-1; e=*p; q=L.elem+L.length-1; for(++p;p<=q;++p)怎么使用视频格式转换软件把3个视频合并到一起
Java多方式实现文件上传
利用VBA实现Word文档的批量拆分与合并本文作者
Java实现视频网站的视频上传及视频播放功能
实验1-2顺序表和链表基本操作_参考答案
Java文件上传类FileUploadUtil.java代码+注释
数据结构实验报告 有序表合并
数据结构实验两个有序顺序表的合并
java实现文件上传、下载
有序顺序表的合并
Java实现视频网站的视频上传及视频播放功能
数据结构实验报告-顺序表的创建、遍历及有序合并操作
java读取上传excel文件和txt文件中的数据
mkvtoolnix电影合并与分割
有序顺序表合并
Java文件上传下载
实验报告03-两个有序链表的合并
实验一-顺序表的设计与实现