将新方法添加到Java库以返回流。
我们可以通过以下方式创建流。
在以下部分中,我们将学习如何创建流。
从值创建流
我们可以使用Stream接口的()从单个值和多个值创建顺序流。
<T> Stream<T> of(T t) <T> Stream<T> of(T...values)
从方法签名,我们可以看到第一个of()方法从单个值创建流,而第二个of()方法从不同长度参数创建流
以下代码创建包含单个值的流。
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
以下代码创建具有四个字符串的流。
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
以下代码从对象数组创建流。
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> 创建流。
以下代码创建流构建器。
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值创建IntStream。
IntStream range(int start, int end) IntStream rangeClosed(int start, int end).
它们创建一个包含开始和结束之间的有序整数的IntStream。
指定的结束在range()方法中是独占的,并且在rangeClosed()方法中是包含的。
以下代码使用这两种方法创建一个IntStream,它的整数为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的参数,并返回一个LongStream。
上面的代码生成以下结果。
空流
空流没有元素。
我们可以使用empty()静态方法从Stream接口以创建空的顺序流。
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()静态方法来创建一个空的基本类型流。
以下代码创建一个空的整数流。
IntStream numbers=IntStream.empty();
雨青工作站发文地址:js html input file 类型 实现图片上传-白雨青工作站
js html input file 类型 实现图片上传
这里只单独讲如何用JS 把选中的文件转成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>
引入转base64后前台显示JS文件
uploadImg.js
let picmax=20; //限制上传数量
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("发布内容:", text)
console.log("图片列表:", imglist)
}
直接看结果
在我们平时的开发中,会遇到用户提的各种需求,其中有一些还是不得不实现的,常见的就有文档在线预览功能,这是一个用户提出来还不好反驳的功能需求,在用户看来,这是一个在正常不过的需求,因此今天就介绍三个文档在线预览或者编辑(本质上是两种)的解决方案,希望通过本文能帮助到大家解决这样类似的需求,而且是免费的。
一般情况下,用户所要求预览的文档莫过于Office系列的或者PDF或者图片,后两者其实很简单,一般不需要费多大力气就能完美解决,基本上可以说浏览器自身就已经满足这个需求了,但是看似普通的office文档想要在线预览,特别是可能还想编辑,这样的需求可能就不是那么容易就解决了,特别上网上有很多收费的解决方案,价格较高,而且可能我们并不需要那么强大的功能,因此就会去找一些替代方案来节省成本,下面我会依次介绍这三种方案。
这种方式相对于后面两种方案是最简单的,这种方案的想法是来源于网易邮箱的在线预览文档功能,微软提供了免费的预览服务:
https://view.officeapps.live.com/op/view.aspx?src=你的文档地址
这种方式的好处显而易见,你什么都不需要做,只需要提供文档的地址就行,当然这也是有前提的,貌似是你的文档地址必须要是域名形式而且不带端口号的,也就是说这种方案只能满足文档机密性较低,而且满足上面提到的条件才行。
截图预览:
文章第一张图就是Excel文档的预览效果截图
PPT在线预览效果:
Word在线预览效果:
从预览效果来看和在Office打开无二,是一个非常不错的选择,图片或者PDF就不要使用这个了,还是用浏览器自带的吧!
这种方案适合大多数情况,我本人也推荐使用这种方式,因为可控性比较高,实际上就是将第一种方式搬到自己本地。部署在自己的服务器上的,本文并不讨论具体如何安装,因为其安装相对复杂,对环境要求比较高,这就是它的缺点。微软自身提供了安装教程,网络上也有很多类似的相关介绍,其使用效果和之前的截图类似,不过如果是自己部署的话是可以实现编辑功能的。
直接搜索“msdn 我告诉你”,除非是有广告,不然应该第一个就是,然后到服务器菜单下
找到它,如下图
然后你就可以去找相关教程了,以下是微软官网的教程,大多数情况你可能还需要各种搜索
https://docs.microsoft.com/zh-cn/OfficeOnlineServer/office-online-server-overview
如果你觉得上面的方法比较复杂,或者说想先自己尝试下,那么你也可以使用下面的方案,以下方案是在收集资料的时候发现的,笔者并未有相关的环境进行测试,感兴趣的网友可以移步到以下地址查看,同时感谢网络上热爱分享的同志们
https://www.jianshu.com/p/c67d103484a4
这是国人开源的项目,支持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上部署相对简单一些,最主要的还支持移动端预览!
以上是我认为基本能够满足大多人需求的解决方案了,你可以针对自己的项目选择适合自己项目的方案,希望能够通过本文的介绍给大家带来一些思路,方案很多,要找到一个适合的才是最重要的!
*请认真填写需求信息,我们会在24小时内与您取得联系。