Java学习者论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

手机号码,快捷登录

恭喜Java学习者论坛(https://www.javaxxz.com)已经为数万Java学习者服务超过8年了!积累会员资料超过10000G+
成为本站VIP会员,下载本站10000G+会员资源,购买链接:点击进入购买VIP会员
JAVA高级面试进阶视频教程Java架构师系统进阶VIP课程

分布式高可用全栈开发微服务教程

Go语言视频零基础入门到精通

Java架构师3期(课件+源码)

Java开发全终端实战租房项目视频教程

SpringBoot2.X入门到高级使用教程

大数据培训第六期全套视频教程

深度学习(CNN RNN GAN)算法原理

Java亿级流量电商系统视频教程

互联网架构师视频教程

年薪50万Spark2.0从入门到精通

年薪50万!人工智能学习路线教程

年薪50万!大数据从入门到精通学习路线年薪50万!机器学习入门到精通视频教程
仿小米商城类app和小程序视频教程深度学习数据分析基础到实战最新黑马javaEE2.1就业课程从 0到JVM实战高手教程 MySQL入门到精通教程
查看: 1960|回复: 1

[JavaFx学习]JavaFX--上传下载大型文件

[复制链接]
  • TA的每日心情
    开心
    2021-3-12 23:18
  • 签到天数: 2 天

    [LV.1]初来乍到

    发表于 2014-10-12 23:49:39 | 显示全部楼层 |阅读模式
    java中,有上传和下载文件的接口,同样的,在JavaFX中也有文件上传和下载功能。这是通过JavaFX1.2中的一个新属性--HttpRequest来实现的。

         HttpRequest拥有inputonInput属性,这可以提供InputStream来用于下载数据。这个stream支持markreset,available,skip等。但是不支持HttpRequest缓冲这些数据。因为缓冲这些数据不能使用这个方法去下载大型文件。

        JavaFX1.2引入了两个新属性--sourceInputStream)和sink(OutputStream)。 如果我们设置sink属性,我们可以直接下载stream中的内容,而用不着buffering。同样的,我们用source来上传内容。当source和sink被使用后,相应的input,onInput,output,onOutput将不再起作用。

    这个应用程序将下载一个大尺寸照片。
    1. function downloadFile(url , outputFile) {
    2.      def getRequest: HttpRequest = HttpRequest {
    3.          location: url
    4.          [b]sink: [/b][b][b]new [/b]java.io.FileOutputStream(outputFile)[/b]
    5.          onToRead: function(bytes: Long) {
    6.              toRead = bytes;
    7.              println("onToRead({bytes})");
    8.          }
    9.          onRead: function(bytes: Long) {
    10.              read = bytes;
    11.              println("onRead - {read * 100/toRead}%");
    12.          }
    13.          onDone: function() { println("onDone") }
    14.      }
    15.      getRequest.start();
    16. }
    17.   在上面的例子中,sink被指派到了FileOutputStream中。所有的内容将被写入文件里而不是buffering。
    18.   注意:为了使这个应用程序与moblie或者其他平台兼容,我们将不得不使用java.io.package的子集:[url=http://java.sun.com/javame/reference/apis/jsr118/java/io/package-summary.html][b]MID Profile Core API[/b][/url].
    复制代码
    1. 源代码:
    复制代码


      
       
       
       
    1. /*
    2.   * Main.fx
    3.   *
    4.   * Created on 17 Jun, 2009, 9:08:36 AM
    5.   */
    6. [b]package [/b]uploaddownload;
    7. [b]import [/b]javafx.stage.Stage;
    8. [b]import [/b]javafx.scene.Scene;
    9. [b]import [/b]javafx.scene.text.Font;
    10. [b]import [/b]javafx.io.http.HttpRequest;
    11. [b]import [/b]javafx.scene.control.ProgressBar;
    12. [b]import [/b]javafx.scene.layout.VBox;
    13. [b]import [/b]javafx.scene.image.Image;
    14. [b]import [/b]javafx.scene.image.ImageView;
    15. [b]import [/b]javafx.scene.layout.LayoutInfo;
    16. [b]import [/b]javafx.scene.control.Button;
    17. [b]import [/b]javafx.scene.layout.HBox;
    18. [b]import [/b]javafx.geometry.VPos;
    19. [b]import [/b]javafx.scene.control.Label;
    20. /**
    21.   * @author Rakesh Menon
    22.   */
    23. var fileURL = "http://farm3.static.flickr.com/2322/2224416159_63abc10bbb_o_d.jpg";
    24. var toRead : Long = 0;
    25. var read : Long = 0;
    26. function downloadFile(url : String, outputFile : java.io.File) {
    27.      def getRequest: HttpRequest = HttpRequest {
    28.          location: url
    29.          
    30.          sink: [b]new [/b]java.io.FileOutputStream(outputFile)
    31.          onStarted: function() { println("onStarted"); }
    32.          onConnecting: function() { println("onConnecting") }
    33.          onDoneConnect: function() { println("onDoneConnect") }
    34.          onReadingHeaders: function() { println("onReadingHeaders") }
    35.          onResponseCode: function(code : Integer) { println("onResponseCode - {code}") }
    36.          onResponseMessage: function(msg : String) { println("onResponseMessage - {msg}") }
    37.          onReading: function() { println("onReading") }
    38.          onToRead: function(bytes: Long) {
    39.              toRead = bytes;
    40.              println("onToRead({bytes})");
    41.          }
    42.          onRead: function(bytes: Long) {
    43.              read = bytes;
    44.              println("onRead({bytes}) - {read * 100/toRead}%");
    45.          }
    46.          onException: function(ex: java.lang.Exception) {
    47.              println("onException - {ex}");
    48.          }
    49.          
    50.          onDoneRead: function() { println("onDoneRead") }
    51.          onDone: function() { println("onDone") }
    52.      }
    53.      getRequest.start();
    54. }
    55. /**
    56.   * Client
    57.   */
    58. var imageView = ImageView {
    59.      image: Image {
    60.          url: "{__DIR__}images/thumbnail.jpg"
    61.          width: 240
    62.          height: 151
    63.          backgroundLoading: [b]true[/b]
    64.      }
    65.      layoutInfo: LayoutInfo { width: 240 height: 151 }
    66. }
    67. var label = Label {
    68.      font : Font { size : 12 }
    69.      text: bind "Downloaded - {read * 100/(toRead + 1)}%"
    70.      layoutInfo: LayoutInfo { vpos: VPos.CENTER maxWidth: 120 minWidth: 120 width: 120 height: 30 }
    71. }
    72. var button = Button {
    73.      text: "Save"
    74.      layoutInfo: LayoutInfo { width: 100 height: 30 }
    75.      action: function() {
    76.          var jFileChooser = [b]new [/b]javax.swing.JFileChooser();
    77.          var outputFile = jFileChooser.showSaveDialog([b]null[/b]);
    78.          [b]if[/b](outputFile == javax.swing.JFileChooser.APPROVE_OPTION) {
    79.              downloadFile(fileURL, jFileChooser.getSelectedFile());
    80.              toRead = 0;
    81.              read = 0;
    82.          }
    83.      }
    84. }
    85. var hBox = HBox {
    86.      spacing: 10
    87.      content: [ label, button ]
    88. }
    89. var progressBar = ProgressBar {
    90.      progress: bind (read/((toRead + 1) as Number))
    91.      layoutInfo: LayoutInfo { width: 240 height: 30 }
    92. }
    93. var vBox = VBox {
    94.      spacing: 10
    95.      content: [ imageView, hBox, progressBar ]
    96.      translateX: 10
    97.      translateY: 10
    98. }
    99. Stage {
    100.      title: "Download File"
    101.      width: 270
    102.      height: 280
    103.      scene: Scene {
    104.          content: [ vBox ]
    105.      }
    106.      resizable: [b]false[/b]
    107. }
    复制代码

       
       
      


      
      
       
       

         
       

         
       
      
    复制代码

    源码下载:http://file.javaxxz.com/2014/10/12/234939140.zip
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|手机版|Java学习者论坛 ( 声明:本站资料整理自互联网,用于Java学习者交流学习使用,对资料版权不负任何法律责任,若有侵权请及时联系客服屏蔽删除 )

    GMT+8, 2024-4-18 10:50 , Processed in 0.326791 second(s), 34 queries .

    Powered by Discuz! X3.4

    © 2001-2017 Comsenz Inc.

    快速回复 返回顶部 返回列表