Java作为世界上最受欢迎的一门编程语言,自然是有原因的。比如说我们可以直接的方便的调用其中的函数来实现我们想要的功能。

一个偶然的机会,我浏览API文档时发现了一个名为FileDialog的类,然后就好奇并进行了查看,结果发现里面大有文章,藉此我是信了一个简单的文件的迁移器。话不多说,请看代码:

首先我们需要一个业务逻辑类,也就是对文件进行操作的类(我们需要注意的是它的构造函数有两个参数,这是为了今后的调用方便而设计的),使用它来方便的帮助我们对文件进行管理:

import java.io.BufferedReader;

import java.io.BufferedWriter;

import java.io.File;

import java.io.FileInputStream;

import java.io.FileOutputStream;

public class FileToFile {

private String urlFrom;
private String urlTo;
private FileInputStream fis = null;
private FileOutputStream fos = null;
private BufferedReader reader = null;
private BufferedWriter writer = null;

public FileToFile(String urlFrom, String urlTo) {
    this.urlFrom = urlFrom;
    this.urlTo = urlTo;
    try {
        fis = newFileInputStream(new File(urlFrom));
        fos = newFileOutputStream(new File(urlTo));
        // reader=newBufferedReader(fis);
        // writer=newBufferedWriter(fos);
        int length;
        byte[] buffer = newbyte[1024];
        while ((length =fis.read(buffer)) != -1) {
           fos.write(buffer, 0, length);
        }
    } catch (Exception e) {
        e.printStackTrace();
    } finally {
        try {
            if(fis != null) {
               fis.close();
               fis = null;

            }
            if(fos != null) {
               fos.close();
               fos = null;
            }
        } catch (Exception e){
           e.printStackTrace();
        }
    }
}

}

有了业务逻辑类,那么我们还需要一个test类来检测不是,请看代码:

import java.awt.BorderLayout;

import java.awt.FileDialog;

import java.awt.FlowLayout;

import java.awt.event.ActionEvent;

import java.awt.event.ActionListener;

import javax.swing.JButton;

import javax.swing.JFrame;

import javax.swing.JLabel;

import javax.swing.JOptionPane;

import javax.swing.JTextField;

public class TestDemo extends JFrame {

/**
 * 由于次数是建议的实现,所以界面不是很好看。
 * 需要注意的是Open按钮的监听函数内的FielDialog的创建及使用
 */
private static final long serialVersionUID = 1L;
private JButton Open, Destination;
private JTextField tf;
private JLabel label = null;
static FileDialog dialog;

public static void main(String[] args) {
    new TestDemo();
}

public TestDemo() {
    Open = new JButton("打开文件的位置<<<<<");
    Destination = new JButton("文件输出位置,记得先在后面的输入框中输入文件路径及拓展名");
    tf = new JTextField(32);
    label = new JLabel();
    label.setText("在这里显示一些hint信息");

    this.setTitle("文件迁移器!");
    this.setSize(500, 400);
    this.setVisible(true);
    this.setLocationRelativeTo(null);
   this.setDefaultCloseOperation(EXIT_ON_CLOSE);
    this.setLayout(new FlowLayout());

    this.add(Open);
    this.add(Destination);
    this.add(tf);
    this.add(label, BorderLayout.CENTER);

    Open.addActionListener(newActionListener() {

        @Override
        public voidactionPerformed(ActionEvent e) {
            //TODO Auto-generated method stub
           dialog = new FileDialog(TestDemo.this, "文件窗口",FileDialog.LOAD);
           dialog.show();
           label.setText("文件来源:" +dialog.getDirectory() + "\n"
                   + dialog.getFile());
           System.out.println("文件来源:" +dialog.getDirectory() + "\n"
                   + dialog.getFile());
        }

    });

    Destination.addActionListener(newActionListener(){

        @Override
        public voidactionPerformed(ActionEvent e) {
            //TODO Auto-generated method stub
           String urlTo=tf.getText().trim().toString();
           String  urlFrom=dialog.getDirectory()+dialog.getFile().trim().toString();
           try{
               if(urlFrom!=null&&urlTo!=null){
                   FileToFile translator=newFileToFile(urlFrom,urlTo);
                  JOptionPane.showMessageDialog(TestDemo.this, "文件转移完毕!!!");
               }else{
                   JOptionPane.showConfirmDialog(null,"请选择文件来源,或者确保您填写了文件的输出位置及相应的拓展名","警告!!!",JOptionPane.YES_NO_OPTION);
               }
           }catch(Exception ex){
               ex.printStackTrace();
               System.out.println("您还没有选择相应的路径!");
            }
        }

    });
}

}

由此,我们便完成了,是不是感觉很简单啊 ?俗话说没有“证据”不足以让人信服,那么下面让我们一起看一下程序完成的效果吧!

Java实现简易的文件的迁移器的更多相关文章

  1. Java有根儿:Class文件以及类加载器

    JVM 是Java的基石,Java从业者需要了解.然而相比JavaSE来讲,不了解JVM的一般来说也不会影响到工作,但是对于有调优需求或者系统架构师的岗位来说,JVM非常重要.JVM不是一个新的知识, ...

  2. Java基础之读文件——使用缓冲读取器读取文件(ReaderInputFromFile)

    控制台程序,本例读取Java基础之写文件部分(WriterOutputToFile)写入的Saying.txt. import java.io.*; import java.nio.file.*; i ...

  3. 五种方式让你在java中读取properties文件内容不再是难题

    一.背景 最近,在项目开发的过程中,遇到需要在properties文件中定义一些自定义的变量,以供java程序动态的读取,修改变量,不再需要修改代码的问题.就借此机会把Spring+SpringMVC ...

  4. Java虚拟机JVM学习06 自定义类加载器 父委托机制和命名空间的再讨论

    Java虚拟机JVM学习06 自定义类加载器 父委托机制和命名空间的再讨论 创建用户自定义的类加载器 要创建用户自定义的类加载器,只需要扩展java.lang.ClassLoader类,然后覆盖它的f ...

  5. Java虚拟机笔记 – JVM 自定义的类加载器的实现和使用2

    1.用户自定义的类加载器: 要创建用户自己的类加载器,只需要扩展java.lang.ClassLoader类,然后覆盖它的findClass(String name)方法即可,该方法根据参数指定类的名 ...

  6. java之jvm学习笔记四(安全管理器)

    java之jvm学习笔记四(安全管理器) 前面已经简述了java的安全模型的两个组成部分(类装载器,class文件校验器),接下来学习的是java安全模型的另外一个重要组成部分安全管理器. 安全管理器 ...

  7. Java 动态生成 PDF 文件

    每片文章前来首小诗:   今日夕阳伴薄雾,印着雪墙笑开颜.我心仿佛出窗前,浮在半腰望西天.  --泥沙砖瓦浆木匠 需求: 项目里面有需要java动态生成 PDF 文件,提供下载.今天我找了下有关了,系 ...

  8. Java类加载机制及自定义加载器

    转载:https://www.cnblogs.com/gdpuzxs/p/7044963.html Java类加载机制及自定义加载器 一:ClassLoader类加载器,主要的作用是将class文件加 ...

  9. HTML5文件上传器,纯脚本无插件的客户端文件上传器---Uploader 文件上传器类

    概述 客户端完全基于JavaScript的 浏览器文件上传器,不需要任何浏览器插件,但需要和jQuery框架协同工作,支持超大文件上传,其算法是将一个超大文件切片成N个数据块依次提交给服务 端处理,由 ...

随机推荐

  1. 转载c++常忘的知识点

    C++的一些知识点比较零碎,下面清单的形式做一些记录与归纳,以供参考. 1.赋值操作符重载(深复制): (1)由于目标对象可能引用了以前的一些数据,所以应该先delete这些数据: (2)注意到对象可 ...

  2. 原生JS实现圆周运动

    <body> <div id="ball" style="width:20px; height:20px; background:red; border ...

  3. 剑指架构师系列-ftp服务器

    1.安装FTP 我们在开发项目时,肯定需要专门的一台ftp服务器来存在上传的静态资源,今天我们就在CentOS下搭建一个ftp服务器. 1.安装vsftpd组件,安装完后,有/etc/vsftpd/v ...

  4. 在ubuntu上安装最新稳定版本的node及npm

    背景 通过ubuntu官方apt安装工具安装的node是最新LTS版本的,而本人是个有点强迫症的人,喜欢追求新的东西,也就是想方设法想要去安装最新版本的node,所以本文也就产生了,附上ubuntu安 ...

  5. Python安装与使用的常见问题

    1. Python安装问题 到Python官网下载Python最新版本 Windows x86-64 executable installer (64为操作系统选择这个) Windows x86 ex ...

  6. python复杂网络库networkx:绘图draw

    http://blog.csdn.net/pipisorry/article/details/54291831 networkx使用matplotlib绘制函数 draw(G[, pos, ax, h ...

  7. 非参数估计:核密度估计KDE

    http://blog.csdn.net/pipisorry/article/details/53635895 核密度估计Kernel Density Estimation(KDE)概述 密度估计的问 ...

  8. 安卓开发遇到Error:Execution failed for task ':app:transformClassesWithDexForDebug'.

    问题如下: Error:Execution failed for task ':app:transformClassesWithDexForDebug'. com.android.build.api. ...

  9. 让你的代码量减少3倍!使用kotlin开发Android(四) kotlin bean背后的秘密

    上一篇我们介绍了缩短五倍的java bean,不知道你在看的时候有没有一种疑问捏? 本文同步自博主的私人博客wing的地方酒馆 再来回顾一下,两种代码的对比 public class User { p ...

  10. Android开发技巧——大图裁剪

    本篇内容是接上篇<Android开发技巧--定制仿微信图片裁剪控件> 的,先简单介绍对上篇所封装的裁剪控件的使用,再详细说明如何使用它进行大图裁剪,包括对旋转图片的裁剪. 裁剪控件的简单使 ...