1991年,Sun公司的James Gosling。Bill Joe等人,为电视、控制烤面包机等家用电器的交互操作开发了一个Oak(一种橡树的名字)软件,他是Java的前身。当时,Oak并没有引起人们的注意,直到1994年,随着互联网和3W的飞速发展,他们用Java编制了HotJava浏览器,得到了Sun公司首席执行官Scott McNealy的支持,得以研发和发展。为了促销和法律的原因,1995年Oak更名为Java。Java的得名还有段小插曲呢,一天,Java小组成员正在喝咖啡时,议论给新语言起个什么名字的问题,有人提议用Java(Java是印度尼西亚盛产咖啡的一个岛屿),这个提议得到了其他成员的赞同,于是就采用Java来命名此新语言。
封面就是图片,用java的类抓取图片即可
package toolimport java.awt.BorderLayout
import java.awt.FlowLayout
import java.awt.event.ActionEvent
import java.awt.event.ActionListener
import java.io.BufferedReader
import java.io.ByteArrayOutputStream
import java.io.File
import java.io.FileOutputStream
import java.io.InputStream
import java.io.InputStreamReader
import java.net.HttpURLConnection
import java.net.URL
import java.util.LinkedList
import java.util.List
import java.util.regex.Matcher
import java.util.regex.Pattern
import javax.swing.ImageIcon
import javax.swing.JButton
import javax.swing.JFrame
import javax.swing.JPanel
import javax.swing.JScrollPane
import javax.swing.JTextField
import javax.swing.JTextPane
import javax.swing.SwingUtilities
import javax.swing.text.Style
import javax.swing.text.StyleConstants
import javax.swing.text.StyleContext
import javax.swing.text.StyledDocument
public class ImageViewer extends JFrame
{
private static final long serialVersionUID = 1L
private static final String DOWNLOADPATH = "download/"
JTextPane textPane = new JTextPane ()
LinkedList<String> initString = new LinkedList<String> ()
LinkedList<String> initStyles = new LinkedList<String> ()
LinkedList<String> path = new LinkedList<String> ()
public ImageViewer ()
{
setTitle ("图片预览下载器 v1.0")
setLayout (new BorderLayout ())
setSize (500, 300)
setLocationRelativeTo (null)
setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE)
}
private void addComponents ()
{
final JTextField urltField = new JTextField ()
JPanel right = new JPanel (new FlowLayout (FlowLayout.RIGHT, 0, 0))
final JButton go = new JButton ("GO")
textPane.setEditable (false)
JScrollPane content = new JScrollPane (textPane)
go.addActionListener (new ActionListener ()
{
@Override
public void actionPerformed ( ActionEvent e )
{
String url = urltField.getText ().trim ()
resolveHTML (url, "utf8", "(?i)\\<img[^\\>]*src[\\=\\s\'\"]+([^\\>\'\"]+)[\'\"]?[^\\>]*\\>")
}
})
JPanel up = new JPanel (new BorderLayout ())
up.add (urltField, BorderLayout.CENTER)
right.add (go)
JButton download = new JButton ("DOWNLOAD")
download.addActionListener (new ActionListener ()
{
@Override
public void actionPerformed ( ActionEvent e )
{
downloadImages ()
}
})
right.add (download)
up.add (right, BorderLayout.EAST)
add (up, BorderLayout.NORTH)
add (content, BorderLayout.CENTER)
}
private void downloadImages ()
{
File fp = new File (DOWNLOADPATH)
if (!fp.exists ())
{
fp.mkdir ()
}
for ( int i = 0 i < path.size () i++ )
{
try
{
String p = path.get (i)
URL url = new URL (p)
HttpURLConnection huc = (HttpURLConnection) url.openConnection ()
huc.setRequestMethod ("GET")
huc.setConnectTimeout (5 * 1000)
InputStream is = huc.getInputStream ()
ByteArrayOutputStream baos = new ByteArrayOutputStream ()
byte[] buffer = new byte[1024]
int len = -1
while (( len = is.read (buffer) ) != -1)
{
baos.write (buffer, 0, len)
}
baos.flush ()
baos.close ()
is.close ()
huc.disconnect ()
byte[] data = baos.toByteArray ()
String name = p.substring (p.lastIndexOf ("/") + 1, p.length ())
name = name.contains (".") ? name : name + ".jpg"
FileOutputStream fos = new FileOutputStream (new File (DOWNLOADPATH + name))
fos.write (data)
fos.flush ()
fos.close ()
}
catch (Exception e)
{
continue
}
}
}
private void loadImages ( List<String> initString, List<String> initStyles, List<String> url )
{
try
{
StyledDocument doc = textPane.getStyledDocument ()
doc.remove (0, doc.getLength ())
addStylesToDocument (doc, url, initStyles)
for ( int i = 0 i < initString.size () i++ )
{
doc.insertString (doc.getLength (), initString.get (i), doc.getStyle (initStyles.get (i)))
}
}
catch (Exception e)
{}
}
protected void addStylesToDocument ( StyledDocument doc, List<String> url, List<String> initStyles )
{
Style def = StyleContext.getDefaultStyleContext ().getStyle (StyleContext.DEFAULT_STYLE)
for ( int i = 0 i < initStyles.size () i++ )
{
Style s = doc.addStyle (initStyles.get (i), def)
StyleConstants.setAlignment (s, StyleConstants.ALIGN_CENTER)
ImageIcon icon = createImageIcon (url.get (i))
if (icon != null)
{
StyleConstants.setIcon (s, icon)
}
}
}
protected static ImageIcon createImageIcon ( String url )
{
URL imgURL = null
try
{
imgURL = new URL (url)
if (imgURL != null)
{
return new ImageIcon (imgURL)
}
}
catch (Exception e)
{}
return null
}
private void resolveHTML ( String spec, String charsetName, String regex )
{
try
{
URL url = new URL (spec)
HttpURLConnection huc = (HttpURLConnection) url.openConnection ()
InputStreamReader isr = new InputStreamReader (huc.getInputStream (), charsetName)
BufferedReader br = new BufferedReader (isr)
StringBuilder builder = new StringBuilder ()
String line = null
while (null != ( line = br.readLine () ))
{
builder.append (line)
}
br.close ()
isr.close ()
huc.disconnect ()
String bs = builder.toString ()
Pattern pattern = Pattern.compile (regex)
Matcher matcher = pattern.matcher (bs)
initString.clear ()
initStyles.clear ()
path.clear ()
while (matcher.find ())
{
String p = matcher.group (1)
initString.add (" ")
initStyles.add (p)
path.add (p)
}
loadImages (initString, initStyles, path)
}
catch (Exception e)
{
return
}
}
public static void main ( String[] args )
{
SwingUtilities.invokeLater (new Runnable ()
{
@Override
public void run ()
{
ImageViewer tester = new ImageViewer ()
tester.addComponents ()
tester.setVisible (true)
}
})
}
}
区别还是很大的。本质区别,java版,Java版顾名思义是使用Java语言编程的,是minecraft的最初版本,一般称之为Java版JE版。基岩版,基岩版英文名称为BedrockEdition,使用C++语言编程,一般称为基岩版PE版携带版。
启动方式区别,Java版,Java版是使用启动器开始游戏的,可以选择游玩版本。基岩版,基岩版无启动器应该不能选择游玩版本(我未玩过基岩版,欢迎玩过的纠正)但能玩快照版本。