整合營銷服務商

          電腦端+手機端+微信端=數(shù)據(jù)同步管理

          免費咨詢熱線:

          Java 創(chuàng)建流

          Java 創(chuàng)建流

          將新方法添加到Java庫以返回流。

          我們可以通過以下方式創(chuàng)建流。

          • 從值創(chuàng)建流
          • 從空流創(chuàng)建流
          • 從函數(shù)創(chuàng)建流
          • 從數(shù)組創(chuàng)建流
          • 從集合創(chuàng)建流
          • 從文件創(chuàng)建流
          • 從其他來源創(chuàng)建流

          在以下部分中,我們將學習如何創(chuàng)建流。

          從值創(chuàng)建流

          我們可以使用Stream接口的()從單個值和多個值創(chuàng)建順序流。

          <T> Stream<T> of(T t)
          <T> Stream<T> of(T...values)
          

          從方法簽名,我們可以看到第一個of()方法從單個值創(chuàng)建流,而第二個of()方法從不同長度參數(shù)創(chuàng)建流

          以下代碼創(chuàng)建包含單個值的流。

          import java.util.stream.Stream;
          public class Main {
           public static void main(String[] args) {
           Stream<String> stream=Stream.of("www.w3cschool.cn");
           stream.forEach(System.out::println);
           }
          }
          

          上面的代碼生成以下結果。

          例2

          以下代碼創(chuàng)建具有四個字符串的流。

          import java.util.stream.Stream;
          public class Main {
           public static void main(String[] args) {
           Stream<String> stream=Stream.of("XML", "Java", "CSS", "SQL");
           stream.forEach(System.out::println);
           }
          }
          

          上面的代碼生成以下結果。

          例3

          以下代碼從對象數(shù)組創(chuàng)建流。

          import java.util.stream.Stream;
          public class Main {
           public static void main(String[] args) {
           String[] names={ "XML", "Java", "SQL", "CSS" };
           Stream<String> stream=Stream.of(names);
           stream.forEach(System.out::println);
           }
          }
          

          上面的代碼生成以下結果。

          流構建器

          我們可以使用 Stream.Builder<T> 創(chuàng)建流。

          以下代碼創(chuàng)建流構建器。

          Stream.Builder<String> builder=Stream.builder();

          import java.util.stream.Stream;
          public class Main {
           public static void main(String[] args) {
           Stream<String> stream=Stream.<String>builder()
           .add("XML")
           .add("Java")
           .add("CSS")
           .add("SQL")
           .build();
           stream.forEach(System.out::println);
           }
          }
          

          上面的代碼生成以下結果。

          IntStream范圍

          我們可以使用IntStream接口中的以下兩種方法從一系列int值創(chuàng)建IntStream。

          IntStream range(int start, int end)
          IntStream rangeClosed(int start, int end).
          

          它們創(chuàng)建一個包含開始和結束之間的有序整數(shù)的IntStream。

          指定的結束在range()方法中是獨占的,并且在rangeClosed()方法中是包含的。

          以下代碼使用這兩種方法創(chuàng)建一個IntStream,它的整數(shù)為1,2,3,4和5作為其元素:

          import java.util.stream.IntStream;
          public class Main {
           public static void main(String[] args) {
           IntStream oneToFive=IntStream.range(1, 6);
           //IntStream oneToFive=IntStream.rangeClosed(1, 5);
           oneToFive.forEach(System.out::println);
           }
          }
          

          像IntStream接口一樣,LongStream類還包含range()和rangeClosed()方法,它們接受類型為long的參數(shù),并返回一個LongStream。

          上面的代碼生成以下結果。

          空流

          空流沒有元素。

          我們可以使用empty()靜態(tài)方法從Stream接口以創(chuàng)建空的順序流。

          import java.util.stream.Stream;
          public class Main {
           public static void main(String[] args) {
           Stream<String> stream=Stream.empty();
           stream.forEach(System.out::println);
           }
          }
          

          IntStream,LongStream和DoubleStream接口還包含一個empty()靜態(tài)方法來創(chuàng)建一個空的基本類型流。

          以下代碼創(chuàng)建一個空的整數(shù)流。

          IntStream numbers=IntStream.empty();

          雨青工作站發(fā)文地址:js html input file 類型 實現(xiàn)圖片上傳-白雨青工作站

          js html input file 類型 實現(xiàn)圖片上傳

          這里只單獨講如何用JS 把選中的文件轉(zhuǎn)成base64 ,然后輸出到前臺顯示

          直接上代碼:

          AddArticle.jsp

          <%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
          <%
          String path=request.getContextPath();
          String basePath=request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
          %>
          
          <!DOCTYPE HTML>
          <html>
            <head>
              <base href="<%=basePath%>">
              
              <title>寫文章-白雨青工作站</title>
              
          	<meta http-equiv="pragma" content="no-cache">
          	<meta http-equiv="cache-control" content="no-cache">
          	<meta http-equiv="expires" content="0">    
          	<meta http-equiv="keywords" content="小說,我有一劍,Java,HTML,Java小工具,白雨青工作站,http://www.byqws.com:8080/byqws">
          	<meta name="description" content="小說,我有一劍,Java,HTML,Java小工具,白雨青工作站,http://www.byqws.com:8080/byqws/">
          	<!---->
          	
          	<link rel="shortcut icon" href="img/byqws-apple-touch-icon-16X16.png" />
          	<link rel="apple-touch-icon" href="img/byqws-apple-touch-icon-57X57.png" />
          	<link rel="apple-touch-icon" sizes="72x72" href="img/byqws-apple-touch-icon-72X72.png" />
          	<link rel="apple-touch-icon" sizes="114x114" href="img/byqws-apple-touch-icon-144X144.png" />
          	
          	<link rel="stylesheet" type="text/css" href="Background/css/addArticle.css">
          	
          	
          	<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no">
          	<script type="text/javascript" src="js/jquery-1.4.min.js"></script>
          	
          	
          	<script src="Background/js/tinymce/tinymce.min.js" type="text/javascript" charset="utf-8"></script>
          	<script src="Background/js/tinymce/langs/zh-Hans.js" type="text/javascript" charset="utf-8"></script> <!--漢化-->
          	
          	<script type="text/javascript" src="Background/js/AddArticle.js"></script>
          	<script type="text/javascript" src="Background/js/mytinymce.js"></script>
          	<script type="text/javascript" src="Background/js/uploadImg.js"></script>
          	
            </head>
            
            <body>
            <div class='main'>
          	<div class='title'>
          		<label >添加一篇文章</label>
          	</div>
          	
          	
          	
          	<div class='FTitle_div'>
          		<input id="FTitle" class='FTitle' placeholder='請輸入標題'></input>
          	</div>
          	
          	<div class='FAbstract_div'>
          		<input id="FAbstract" class='FAbstract' placeholder='請輸入摘要'></input>
          	</div>
          	<div class='content_div'>
          		<textarea id="content" class='content'></textarea>
          	</div>
          	<div class="FCover">封面圖片</div>
          	<div class="upload-piclist">
          		
                 	<div class="upload-file">
                     <input type="file" id="file" accept="image/*" multiple onchange="imgChange()"/>
                 	</div>
              </div>
          	<input id="submitbutton" class='submitbutton' type='button' value='提交'></input>
          </div>
            </body>
          </html>
          

          <script type="text/javascript" src="Background/js/uploadImg.js"></script>

          引入轉(zhuǎn)base64后前臺顯示JS文件

          uploadImg.js

          let picmax=20; //限制上傳數(shù)量 
          function imgChange() {
          	let file=document.getElementById('file').files;
          	let imglist=document.querySelectorAll('.upload-Picitem');
          	let piclist=document.getElementsByClassName('upload-piclist')[0];
          	let filelist=file.length + imglist.length > picmax ? 9 - imglist.length : file.length + imglist.length;
          	if (file.length + imglist.length >=9) {
          		let uploadfile=document.getElementsByClassName('upload-file')[0]
          		uploadfile.style.display="none"
          	}
          	for (let i=0; i < filelist; i++) {
          		readerfile(file[i]).then(e=> {
          			let html=document.createElement('div');
          			html.className='upload-Picitem'
          			html.innerHTML='<img src=' + e + ' alt="pic">'
          			piclist.appendChild(html);
          		})
          	}
          }
          
          function readerfile(file) {
          	return new Promise((resolve, reject)=> {
          		let reader=new FileReader();
          		reader.addEventListener("load", function() {
          			resolve(reader.result);
          		}, false)
          		if (file) {
          			reader.readAsDataURL(file)
          		}
          	})
          }
          
          //提交
          function submit() {
          	let imglist=[]
          	//let text=document.getElementsByClassName('upload-textarea')[0].value
          	let piclist=document.querySelectorAll('.upload-Picitem');
          	for (let i=0; i < piclist.length; i++) {
          		imglist.push(piclist[i].lastChild.src)
          	}
          	//console.log("發(fā)布內(nèi)容:", text)
          	console.log("圖片列表:", imglist)
          }
          
          
          
          

          直接看結果

          什么會寫這篇文章?

          在我們平時的開發(fā)中,會遇到用戶提的各種需求,其中有一些還是不得不實現(xiàn)的,常見的就有文檔在線預覽功能,這是一個用戶提出來還不好反駁的功能需求,在用戶看來,這是一個在正常不過的需求,因此今天就介紹三個文檔在線預覽或者編輯(本質(zhì)上是兩種)的解決方案,希望通過本文能幫助到大家解決這樣類似的需求,而且是免費的。



          常見的文檔預覽格式要求

          一般情況下,用戶所要求預覽的文檔莫過于Office系列的或者PDF或者圖片,后兩者其實很簡單,一般不需要費多大力氣就能完美解決,基本上可以說瀏覽器自身就已經(jīng)滿足這個需求了,但是看似普通的office文檔想要在線預覽,特別是可能還想編輯,這樣的需求可能就不是那么容易就解決了,特別上網(wǎng)上有很多收費的解決方案,價格較高,而且可能我們并不需要那么強大的功能,因此就會去找一些替代方案來節(jié)省成本,下面我會依次介紹這三種方案。

          微軟免費提供在線版本office預覽

          這種方式相對于后面兩種方案是最簡單的,這種方案的想法是來源于網(wǎng)易郵箱的在線預覽文檔功能,微軟提供了免費的預覽服務:

          https://view.officeapps.live.com/op/view.aspx?src=你的文檔地址
          

          這種方式的好處顯而易見,你什么都不需要做,只需要提供文檔的地址就行,當然這也是有前提的,貌似是你的文檔地址必須要是域名形式而且不帶端口號的,也就是說這種方案只能滿足文檔機密性較低,而且滿足上面提到的條件才行。


          截圖預覽:

          文章第一張圖就是Excel文檔的預覽效果截圖


          PPT在線預覽效果:



          Word在線預覽效果:



          從預覽效果來看和在Office打開無二,是一個非常不錯的選擇,圖片或者PDF就不要使用這個了,還是用瀏覽器自帶的吧!

          自部署Office Online Server

          這種方案適合大多數(shù)情況,我本人也推薦使用這種方式,因為可控性比較高,實際上就是將第一種方式搬到自己本地。部署在自己的服務器上的,本文并不討論具體如何安裝,因為其安裝相對復雜,對環(huán)境要求比較高,這就是它的缺點。微軟自身提供了安裝教程,網(wǎng)絡上也有很多類似的相關介紹,其使用效果和之前的截圖類似,不過如果是自己部署的話是可以實現(xiàn)編輯功能的。

          • get地址

          直接搜索“msdn 我告訴你”,除非是有廣告,不然應該第一個就是,然后到服務器菜單下

          找到它,如下圖



          然后你就可以去找相關教程了,以下是微軟官網(wǎng)的教程,大多數(shù)情況你可能還需要各種搜索

          https://docs.microsoft.com/zh-cn/OfficeOnlineServer/office-online-server-overview


          • 虛擬機安裝

          如果你覺得上面的方法比較復雜,或者說想先自己嘗試下,那么你也可以使用下面的方案,以下方案是在收集資料的時候發(fā)現(xiàn)的,筆者并未有相關的環(huán)境進行測試,感興趣的網(wǎng)友可以移步到以下地址查看,同時感謝網(wǎng)絡上熱愛分享的同志們


          https://www.jianshu.com/p/c67d103484a4


          開源的文檔在線預覽方案 kkFileView

          這是國人開源的項目,支持doc、docx、ppt、pptx、xls、xlsx、zip、rar、mp4、mp3以及眾多類文本如txt、html、xml、java、properties、sql、js、md、json、conf、ini、vue、php、py、bat、gitignore等文件在線預覽,可以說很全面了,而且部署相對簡單,具體如何部署可以到開源地址:


          https://gitee.com/kekingcn/file-online-preview


          效果預覽,分別是word、圖片和壓縮文件





          從預覽效果上可能比不上Office Online,但是它支持的格式多,而且是開源的,主要使用spring boot,可以部署在windows、linux或者MacOS上,在windows上部署相對簡單一些,最主要的還支持移動端預覽!

          總結

          以上是我認為基本能夠滿足大多人需求的解決方案了,你可以針對自己的項目選擇適合自己項目的方案,希望能夠通過本文的介紹給大家?guī)硪恍┧悸罚桨负芏啵业揭粋€適合的才是最重要的!


          主站蜘蛛池模板: 久久福利一区二区| 精品久久久久久无码中文字幕一区| 国产在线一区二区三区| 在线观看日韩一区| 国产91久久精品一区二区| 国产一区二区精品久久岳| 精品免费国产一区二区三区| 精品国产一区二区三区不卡| 性色A码一区二区三区天美传媒| 一区二区三区在线观看免费| 午夜DV内射一区区| 国产小仙女视频一区二区三区 | 波多野结衣一区二区| 亚洲AV无码一区二区三区DV| 无码少妇一区二区三区芒果| 在线视频一区二区三区| 一区二区三区国产精品 | 香蕉免费一区二区三区| 免费萌白酱国产一区二区三区 | 无码丰满熟妇浪潮一区二区AV| 91视频一区二区| 国产精品亚洲一区二区麻豆 | 久久精品成人一区二区三区| 99精品国产高清一区二区麻豆| 亚洲美女一区二区三区| 亚洲综合一区二区| 亚洲AV无码一区二区三区网址| 亚洲字幕AV一区二区三区四区| 毛片一区二区三区| 韩国精品一区二区三区无码视频| 国内精品视频一区二区八戒| 国产在线步兵一区二区三区| 天堂不卡一区二区视频在线观看| 亚洲免费视频一区二区三区| 久久精品国产亚洲一区二区三区| 亚洲AV综合色区无码一区爱AV| 精品亚洲AV无码一区二区三区 | 大伊香蕉精品一区视频在线| 久久国产视频一区| 无码人妻aⅴ一区二区三区有奶水| 日韩视频免费一区二区三区|