读书:十年,一直在路上

1.开篇

一开始是抱着随便看看的心态,开始读.可是作者又怎会真的让大家随便读呢.于是,像一个泥潭一样,越来越陷入到故事中.去思索那些在故事中的人,想他们的走过的路,喝过的水,看过的星空……这些的这些都很美好,至少在书里是这样的.即便充满伤痛,也看起来那般美好.我说不出来这是怎样的一种体会,很难.其实只有很简单的12个故事,每个都不一样,却都充斥着一种东西,让人说不清,也许是力量,也可能是鼓励,或者是生活……不知道,到底是什么.或许不揭开,更美好呢.

2.前行

我没有用计算器去算过十年有多少天,多少小时,多少分钟.但我知道,十年,可以让一个人飞黄腾达,也同样可以让一个人跌落谷底.这些都太过平常了,任何一个奔三的人,谁没有一个十年的故事呢.只是内容不同罢了.在书里的故事里的那些人,此刻正像幻灯片一样浮现在我脑海中,豆儿、阿明、老兵、毛毛、成子、二宝、椰子姑娘、杂草敏、还有《对不起》那个故事里的姑娘,每次看到《对不起》,总是觉得好惋惜和痛恨,痛恨世人的无情,惋惜那姑娘的遭遇。要是不是丽江,可能那条狗的命运会改变,要是那次同学聚会哥哥没有去,或许那依然是一个幸福的姑娘……书里的人,太多太多,发生的事情太多。到此时,才发现那些故事的疼,一点一点渗入心脾,隐隐作痛。希望故事里的那些人,守着自己的幸福。

对了,还有昌宝,那条哈士奇,其实我也没明白,它是怎么皈依的?在之前我并不知道,但是现在我知道了。嗯。

在看这本书之前,我在韩寒的一个One上看过两遍《对不起》,一次是在手机上,另外一次是在电脑上。同一天。另外一篇文章好像是《乖,摸摸头》,写杂草敏的那个,看过一次,印象深刻。之后听说出书了,不过现在才看完,有些遗憾。

每一个有故事的人,总有些不为人知,许是心酸,许是幸福。

乖摸摸头
image-2281
乖摸摸头

3.转身

看完了多少还是有些受感染,在某个时刻,真的差点冲动背起行囊出发.

无论是拉萨还是丽江,都是不错的选择.我只是在想,若现在不去,以后还能找到书中的那个丽江,那个拉萨吗?

十年,完全不是几万字,几十万字可以描写。他在写十年的路,我们在看,是的,只是个观众。

有时候我想,这十年最美好的是什么呢?幸福?微笑?不,我觉得是那些人,那些在生命中短暂停留的人。

假如问我,最喜欢哪一个故事,我也许会反问:你最爱自己的哪一根手指?

无量天尊,哈利路亚,阿弥陀佛么么哒。

乖,摸摸头。

PS:大冰在新浪微博也叫大冰。地址

Java:连接MongoDB的一些示例

是这样的

首先,这篇主要面向有一些MongoDB经验的.
本来打算在很久之前就整理一下Java连接MongoDB的内容,但是一拖再拖只好现在写了,希望还不算太迟.由于安装实在太过于简单了,所以这里直接讲怎么连接.

1.连接到MongoDB

连接前首先要导入以下两个包,可以在这里找到(点我,点我,快点我啊):

  • bson文件夹下面的:bson-*.jar [*=版本]
  • mongo-java-driver文件夹下面的:mongo-java-driver-*.jar[*=版本]

两个的版本最好是一样的,避免出现问题.

在这里使用的bson和mongo-java-driver版本均是:3.0.1

下面是连接的源码[一定要先启动MongoDB服务器,否则报错!]:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
        //连接到mongodb.
    MongoClient mongoClient = new MongoClient();
    /*
    可以上面那样连接,也可以像下面这样去连接[来自官方文档]:
     MongoClient mongoClient1 = new MongoClient();
 MongoClient mongoClient1 = new MongoClient("localhost");
 MongoClient mongoClient2 = new MongoClient("localhost", 27017);
 MongoClient mongoClient4 = new MongoClient(new ServerAddress("localhost"));
 MongoClient mongoClient5 = new MongoClient(new ServerAddress("localhost"), new MongoClientOptions.Builder().build());
 
或者:
MongoClient mongoClient = new MongoClient(Arrays.asList(
   new ServerAddress("localhost", 27017),
   new ServerAddress("localhost", 27018),
   new ServerAddress("localhost", 27019)));
    */
        MongoDatabase db = mongoClient.getDatabase("test");
        System.out.println(db);
        // end.

运行结果如下:

1
2
3
4
May 14, 2015 9:08:03 PM com.mongodb.diagnostics.logging.JULLogger log
INFO: Cluster created with settings {hosts=[127.0.0.1:27017], mode=SINGLE, requiredClusterType=UNKNOWN, serverSelectionTimeout='30000 ms', maxWaitQueueSize=500}
com.mongodb.MongoDatabaseImpl@35f983a6
Process finished with exit code 0

mongodb
image-2278

2.插入数据

插入数据的时候要用到上面的源码,并且要确认MongoDB真实可用[输入命令mongo试试即可].

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
        //连接到mongodb.
        MongoClient mongoClient = new MongoClient();
        MongoDatabase db = mongoClient.getDatabase("test");
        // end.
        //--------------------------
        //插入一个文档.
        db.getCollection("restaurants").insertOne(new Document("address"
                , new Document().append("street", "2 Avenue")
                .append("street", "2 Avenue")
                .append("zipcode", "10075")
                .append("building", "1480")
                .append("coord", asList(-73.9557413, 40.7720266)))
                .append("borough", "Manhattan")
                .append("cuisine", "Italian")
                .append("grades", asList(
                        new Document().append("date", "2014-10-01T00:00:00")
                                .append("grade", "A")
                                .append("score", "11"),
                        new Document().append("date", LocalDateTime.now().toString())
                                .append("grade", "B")
                ))
                .append("name", "test").append("restaurant_id", "41704620"));

insertOne(),运行成功之后是没有提示的!!

3.查询结果

查询有多种条件过滤,更多可以参考文档.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
//连接到mongodb.
        MongoClient mongoClient = new MongoClient();
        MongoDatabase db = mongoClient.getDatabase("test");
        // end.
        //--------------------------
        FindIterable<Document> iterable =db.getCollection("restaurants").find(eq("borough", "Manhattan"));
        //下面是其他查询方式.[这些方式都可以用new Document替代,但是这样写更加简洁.]
        /*
         db.getCollection("restaurants").find(eq("borough", "Manhattan"));
        db.getCollection("restaurants").find(eq("address.zipcode", "10075"));
        db.getCollection("restaurants").find(gt("grades.score", 30));
        db.getCollection("restaurants").find(lt("grades.score", 10));
        db.getCollection("restaurants").find(and(eq("cuisine", "Italian"), eq("address.zipcode", "10075")));
        db.getCollection("restaurants").find(or(eq("cuisine", "Italian"), eq("address.zipcode", "10075")));
        db.getCollection("restaurants").find().sort(ascending("borough", "address.zipcode"));
        */
        iterable.forEach(new Block<Document>() {
            @Override
            public void apply(final Document document) {
                System.out.println(document);
            }
        });

下面是我的查询结果:

1
Document{{_id=5554bfa96204f509fa8578c3, address=Document{{street=2 Avenue, zipcode=10075, building=1480, coord=[-73.9557413, 40.7720266]}}, borough=Manhattan, cuisine=Italian, grades=[Document{{date=2014-10-01T00:00:00, grade=A, score=11}}, Document{{date=2015-05-14T23:30:49.132, grade=B}}], name=test, restaurant_id=41704620}}

4.更新数据

更新数据,源码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
//连接到mongodb.
        MongoClient mongoClient = new MongoClient();
        MongoDatabase db = mongoClient.getDatabase("test");
        // end.
        //--------------------------更新一条数据,返回更新条数
        db.getCollection("restaurants").updateOne(
          new Document("name","Juni"),
                new Document("$set",new Document("cuisine",
                        "American (Bew)")).append(
                        "$currentDate",new Document
                                ("lastModified",true)));
        /*
        更新多条数据,使用下面的代码[返回更新条数]:
        db.getCollection("restaurants").updateMany(new Document("address.zipcode", "10016").append("cuisine", "Other"),
        new Document("$set", new Document("cuisine", "Category To Be Determined"))
                .append("$currentDate", new Document("lastModified", true)));
        */

除了上面更新,也可以使用替换(替换将覆盖原文档!!).

1
2
3
4
5
6
7
8
db.getCollection("restaurants").replaceOne(new Document("restaurant_id", "41704620"),
        new Document("address",
                new Document()
                        .append("street", "2 Avenue")
                        .append("zipcode", "10075")
                        .append("building", "1480")
                        .append("coord", asList(-73.9557413, 40.7720266)))
                .append("name", "Vella 2"));

5.删除数据

!!!删除前,一定要做好备份!!

一共有三个删除方式:

  • 1.删除文档
  • 2.删除全部文档
  • 3.删除集合
1
2
3
4
5
6
7
8
9
10
//返回删除数
db.getCollection("restaurants").deleteMany(new Document("borough", "Manhattan"));
/*
删除全部文档[返回删除数]:
        db.getCollection("restaurants").deleteMany(new Document());

删除一个集合:

        db.getCollection("restaurants").drop();
*/

6.聚合查询

下面是一个例子,里面的[$group]、[$sum]均是MongoDB的关键字,可以查阅相应文档获取更多.

1
2
3
4
5
6
7
8
9
    //实在不好意思,我也是写到这才发现toJson返回的数据是格式化过的..
    AggregateIterable<Document> iterable = db.getCollection("restaurants").aggregate(asList(
                new Document("$group", new Document("_id", "$borough").append("count", new Document("$sum", 1)))));
        iterable.forEach(new Block<Document>(){
            @Override
            public void apply(final Document document) {
                System.out.println(document.toJson());
            }
        });

7.索引

下面是两个创建索引的方式:

1
2
3
4
5
db.getCollection("restaurants").createIndex(new Document("cuisine", 1));//创建单个索引

//------------

db.getCollection("restaurants").createIndex(new Document("cuisine", 1).append("address.zipcode", 1));//创建多个索引

源码

上面所有示例的源码.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
    package com.mongodemos;

import com.mongodb.Block;
import com.mongodb.MongoClient;
import com.mongodb.client.AggregateIterable;
import com.mongodb.client.FindIterable;
import com.mongodb.client.MongoDatabase;
import org.bson.Document;

import java.time.LocalDateTime;

import static com.mongodb.client.model.Filters.eq;
import static java.util.Arrays.asList;

/**
 * MongoDB -Java常用操作.
 *
 * @author puruidong
 * @version 2015.05.15 00:45
 */
public class Main {
    public static void main(String[] args) {
        //连接到mongodb.
        MongoClient mongoClient = new MongoClient();
        MongoDatabase db = mongoClient.getDatabase("test");
        // end.
        //--------------------------
        //看相应方法调取.
    }

    /**
     * 聚合查询.
     *
     * @param db
     */
    private static void aggFind(MongoDatabase db) {
        AggregateIterable<Document> iterable = db.getCollection("restaurants").aggregate(asList(
                new Document("$group", new Document("_id", "$borough").append("count", new Document("$sum", 1)))));
        iterable.forEach(new Block<Document>() {
            @Override
            public void apply(final Document document) {
                System.out.println(document.toJson());
            }
        });
    }


    /**
     * 删除数据.!慎用!!
     *
     * @param db
     * @return
     */
    private static long deleteData(MongoDatabase db) {
        //返回删除数
        return db.getCollection("restaurants").deleteMany(new Document("borough", "Manhattan")).getDeletedCount();
        /*
        删除全部文档[返回删除数]:
                db.getCollection("restaurants").deleteMany(new Document());

        删除一个集合:

                db.getCollection("restaurants").drop();
        */

    }


    /**
     * 更新文档数据
     *
     * @param db
     * @return
     */
    private static long updateData(MongoDatabase db) {
        return db.getCollection("restaurants").updateOne(
                new Document("name", "Juni"),
                new Document("$set", new Document("cuisine",
                        "American (Bew)")).append(
                        "$currentDate", new Document
                                ("lastModified", true))).getModifiedCount();
        /*
         更新多条数据,使用下面的代码[返回更新条数]:

        db.getCollection("restaurants").updateMany(new Document("address.zipcode", "10016").append("cuisine", "Other"),
        new Document("$set", new Document("cuisine", "Category To Be Determined"))
                .append("$currentDate", new Document("lastModified", true)));



        替换使用下面的代码[替换会覆盖原有数据]:

        db.getCollection("restaurants").replaceOne(
                new Document("restaurant_id","41704620"),
                new Document("address",new Document()
                .append("street","2 Avenue")
                        .append("zipcode","1007")
                        .append("building","1480")
                        .append("coord",asList(-73.9557413,40.7720266))
                .append("name","Vella 2"))
        );

        */

    }

    /**
     * 查询数据.
     *
     * @param db
     */
    private static void findData(MongoDatabase db) {
        FindIterable<Document> iterable = db.getCollection("restaurants").find(eq("borough", "Manhattan"));
        //下面是其他查询方式.[这些方式都可以用new Document替代,但是这样写更加简洁.]
        /*
         db.getCollection("restaurants").find(eq("borough", "Manhattan"));
        db.getCollection("restaurants").find(eq("address.zipcode", "10075"));
        db.getCollection("restaurants").find(gt("grades.score", 30));
        db.getCollection("restaurants").find(lt("grades.score", 10));
        db.getCollection("restaurants").find(and(eq("cuisine", "Italian"), eq("address.zipcode", "10075")));
        db.getCollection("restaurants").find(or(eq("cuisine", "Italian"), eq("address.zipcode", "10075")));
        db.getCollection("restaurants").find().sort(ascending("borough", "address.zipcode"));
        */
        iterable.forEach(new Block<Document>() {
            @Override
            public void apply(final Document document) {
                System.out.println(document);
            }
        });
    }

    /**
     * 通过db对象插入一个集合.
     *
     * @param db
     */
    private static void insertData(MongoDatabase db) {
        //插入一个文档.
        db.getCollection("restaurants").insertOne(new Document("address"
                , new Document().append("street", "2 Avenue")
                .append("street", "2 Avenue")
                .append("zipcode", "10075")
                .append("building", "1480")
                .append("coord", asList(-73.9557413, 40.7720266)))
                .append("borough", "Manhattan")
                .append("cuisine", "Italian")
                .append("grades", asList(
                        new Document().append("date", "2014-10-01T00:00:00")
                                .append("grade", "A")
                                .append("score", "11"),
                        new Document().append("date", LocalDateTime.now().toString())
                                .append("grade", "B")
                ))
                .append("name", "test").append("restaurant_id", "41704620"));


    }
}

嗯,暂时就这些.如果有不明白的可以网上搜索一下MongoDB教程.

jQuery:文字滚动效果

是这样的

[源码来自网络,部分有修改]

友情链接太多了,展示的话太占地方了,所以也就只能想其它办法解决了……

于是,滚动信息的效果就出来了,具体效果可以查看本博边栏右侧下方的效果.(也可以看下面的图[gif,点击看动图]……)

jQuery文字滚动效果
image-2272

实现

实现效果很简单,最关键的就是css和jQuery的控制.参照下面的源码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
<!doctype html>
<html>
    <head>
        <meta charset="utf-8">
        <meta name="viewport" content="width=device-width, height=device-height, initial-scale=1.0, maximum-scale=1.0, target-densityDpi=(device-dpi)/2" />
        <title>文字滚动</title>
        <script src="http://libs.baidu.com/jquery/1.9.1/jquery.min.js"></script>
        <style type="text/css">
        .record_Top{width:90%; height:50px; background:url(../images/record_Bg.png) center center no-repeat; background-size:contain; text-align:center; line-height:50px; margin:30px auto 0px; color:#fff;}
        .topRec_List dl,.maquee{ width:90%; overflow:hidden; margin:0 auto; color:#7C7C7C}
        .topRec_List dd{ float:left; text-align:center; border-bottom:1px solid #1B96EE; color:#1B96EE;}
        .topRec_List dl dd{ width:100%; height:40px; line-height:40px; }
        .maquee{ height:195px;}
        .topRec_List ul{ width:100%; height:195px;}
        .topRec_List li{ width:100%; height:38px; line-height:38px; text-align:center; font-size:12px; border-bottom: 1px dashed #aaa;}
        </style>
    </head>
    <body>
        <div class="Top_Record">
            <div class="record_Top"><p>滚动示例</p></div>
            <div class="topRec_List">
                <dl>
                    <dd>编号</dd>
                </dl>
                <div class="maquee">
                    <ul>
                        <li>1</li>
                        <li>2</li>
                        <li>3</li>
                        <li>4</li>
                        <li>5</li>
                        <li>6</li>
                        <li>7</li>
                        <li>8</li>
                        <li>9</li>
                        <li>10</li>
                    </ul>
                </div>
            </div>
        </div>
        <script type="text/javascript">
        function autoScroll(obj){
        $(obj).find("ul").animate({
        marginTop : "-39px"
        },500,function(){
        $(this).css({marginTop : "0px"}).find("li:first").appendTo(this);
        })
        }
        $(function(){
        setInterval('autoScroll(".maquee")',2000);
        })

        </script>
    </body>
</html>

Java8:一行代码读写文件

方便

其实在Java1.7中就已经新增了java.nio包,但是用的太少了,直到今晚遇到一个读取文件的问题.才想起来,就找到了例子,下面的代码部分来自网络.

java
image-2269

较”复杂”版本

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
import java.io.*;
import java.nio.charset.Charset;
import java.nio.file.Files;
import java.nio.file.Paths;

/**
 * Created by puruidong on 2015/5/1.
 */


public class Entity {
    public static void main(String[] args) throws IOException {
         if (!Files.exists(Paths.get(".\\test.txt"))) Files.write(Paths.get(".\\test.txt"), new byte[0]);
        if (!Files.exists(Paths.get(".\\newtest.txt"))) Files.write(Paths.get(".\\newtest.txt"), new byte[0]);
        try (
                FileInputStream fis = new FileInputStream(".\\test.txt");
                FileOutputStream fos = new FileOutputStream(".\\newtest.txt");
        ) {
            if (Files.readAllLines(Paths.get(".\\test.txt")).size() == 0) {
                Files.write(Paths.get(".\\test.txt"), ("first write------" + System.currentTimeMillis()).getBytes());
            }else{
                //一行代码写入文件.
                Files.write(Paths.get(".\\test.txt"), ("more write------" + System.currentTimeMillis()).getBytes());
            }
            int result = 0;
            byte[] by = new byte[1024];
            while ((result = fis.read(by)) != -1) {
                fos.write((new String(by) + "---" + System.currentTimeMillis()).getBytes());
            }
            /*
             * java 8 一行代码读取文件内容
               *
               1)文件可能很大,可能会超出内存空间,使用前要做评估。
               2)要输出日志,记录为什么无法读取文件或者在阅读文件时遇到的任何错误。
               3)在把字节转换成字符时,应该指定字符编码。
               4)要处理文件不存在的情况。
               还要注意,如果读入的文件的编码是ANSI编码,那么上面的例子在读取文件内容时会报java.nio.charset.MalformedInputException: Input length = 1错误。
             *
             */
            Files.readAllLines(Paths.get(".\\newtest.txt"), Charset.defaultCharset()).forEach(t -> System.out.println("newtest.txt:" + t));
        }
    }
}

更加”偷懒”的版本

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
import java.io.*;
import java.nio.charset.Charset;
import java.nio.file.Files;
import java.nio.file.Paths;

/**
 * Created by puruidong on 2015/5/1.
 */


public class Entity {
    public static void main(String[] args) throws IOException {
        //检查文件是否存在
        if (!Files.exists(Paths.get(".\\test.txt"))) Files.write(Paths.get(".\\test.txt"), new byte[0]);
        if (!Files.exists(Paths.get(".\\newtest.txt"))) Files.write(Paths.get(".\\newtest.txt"), new byte[0]);
        //end.
        if (Files.readAllLines(Paths.get(".\\test.txt")).size() == 0) {
            Files.write(Paths.get(".\\test.txt"), ("first write------" + System.currentTimeMillis()).getBytes());
        } else {
            //一行代码写入文件.
            Files.write(Paths.get(".\\test.txt"), ("more write------" + System.currentTimeMillis()).getBytes());
        }
            Files.write(Paths.get(".\\newtest.txt"), (Files.readAllLines(Paths.get(".\\test.txt"))));
       
            /*
             * java 8 一行代码读取文件内容
               *
               1)文件可能很大,可能会超出内存空间,使用前要做评估。
               2)要输出日志,记录为什么无法读取文件或者在阅读文件时遇到的任何错误。
               3)在把字节转换成字符时,应该指定字符编码。
               4)要处理文件不存在的情况。
               还要注意,如果读入的文件的编码是ANSI编码,那么上面的例子在读取文件内容时会报java.nio.charset.MalformedInputException: Input length = 1错误。
             *
             */
        Files.readAllLines(Paths.get(".\\newtest.txt"), Charset.defaultCharset()).forEach(t -> System.out.println("newtest.txt:" + t));
    }
}

较为”舒适”的版本

下面这个是我自己觉得比较好的版本,虽然改进空间很大,但对于这个小程序来说,应该是足够了.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
import java.io.*;
import java.nio.charset.Charset;
import java.nio.file.Files;
import java.nio.file.Paths;

/**
 * Created by puruidong on 2015/5/1.
 */


public class Entity {
    public static void main(String[] args) throws IOException {
        //检查文件是否存在
        if (!Files.exists(Paths.get(".\\test.txt"))) write(".\\test.txt", new byte[0]);
        if (!Files.exists(Paths.get(".\\newtest.txt"))) write(".\\newtest.txt", new byte[0]);
        //end.
        if (Files.readAllLines(Paths.get(".\\test.txt")).size() == 0) {
            write(".\\test.txt", ("first write------" + System.currentTimeMillis()).getBytes());
        } else {
            //一行代码写入文件.
            write(".\\test.txt", ("more write------" + System.currentTimeMillis()).getBytes());
        }
        write(".\\newtest.txt", (Files.readAllLines(Paths.get(".\\test.txt"))));
        show(".\\newtest.txt");
    }

    //还有两个就懒得实现了,只是第二个参数不同

    /**
     * 一行代码写文件的封装.
     *
     * @param paths
     * @param content
     * @throws IOException
     */
    private static void write(String paths, Iterable<? extends CharSequence> content) throws IOException {
        Files.write(Paths.get(paths), content);
    }

    /**
     * 一行代码写文件的封装
     *
     * @param paths
     * @param content
     * @throws IOException
     */
    private static void write(String paths, byte[] content) throws IOException {
        Files.write(Paths.get(paths), content);
    }


    /**
     * 一行代码输出文件
     *
     * java 8 一行代码读取文件内容
     *
     1)文件可能很大,可能会超出内存空间,使用前要做评估。
     2)要输出日志,记录为什么无法读取文件或者在阅读文件时遇到的任何错误。
     3)在把字节转换成字符时,应该指定字符编码。
     4)要处理文件不存在的情况。
     还要注意,如果读入的文件的编码是ANSI编码,那么上面的例子在读取文件内容时会报java.nio.charset.MalformedInputException: Input length = 1错误。
     *
     * @param filepath
     * @throws IOException
     */
    private static void show(String filepath) throws IOException {
        Files.readAllLines(Paths.get(filepath), Charset.defaultCharset()).forEach(t -> System.out.println(filepath + "------>#" + t));
    }
}