网络文件或字符串获取类 - 军军小站|张军博客

网络文件或字符串获取类

张军 6516 0
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
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
package zj.io.util;
 
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.Serializable;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLConnection;
 
import zj.common.exception.ServiceException;
import zj.java.util.JavaUtil;
 
/**
 * 网络文件或字符串获取类<br>
 
 * @version 1.00 (2011.12.02)
 * @author 张军 {@link <a target=_blank href="http://www.zhangjunbk.com">张军个人网站</a>&nbsp;&nbsp;&nbsp;&nbsp;<a target=_blank href="http://user.qzone.qq.com/360901061/">张军QQ空间</a>}
 */
public class NetWorkUtil implements Serializable {
    private static final long serialVersionUID = 1L;
    // private transient static final Logger logger = Logger.getLogger(NetWorkUtil.class);
 
    /**
     * 保存网络文件
     
     * @param urlAddr
     *            远程地址
     * @param localAddr
     *            本地地址
     * @throws Exception
     */
    public static void writeFileToLocalByURL(String urlAddr, String localAddr) {
        BufferedOutputStream bos = null;
        BufferedInputStream fis = null;
        try {
            // 以流的形式下载文件。
            URL urlObj = new URL(urlAddr);
            URLConnection uc = urlObj.openConnection();
            fis = new BufferedInputStream(uc.getInputStream());
            // 取得目标文件路径
            if (localAddr == null || localAddr.equals("")) {
                String[] paths = FileUtil.getFileNameExtension(urlAddr);
                if (paths.length > 2) {
                    localAddr = paths[1] + paths[2];
                else {
                    File file = new File(urlAddr);
                    localAddr = file.getName();
                }
 
            }
            // byte[] buffer = new byte[fis.available()];
            // fis.read(buffer);
            File fileDesc = new File(localAddr);
 
            String[] extension = FileUtil.getFileNameExtension(localAddr);
            File extensionFile = new File(extension[0]);
            if (!extensionFile.exists()) {
                extensionFile.mkdirs();
            }
            bos = new BufferedOutputStream(new FileOutputStream(fileDesc));
            int blen = 1024 5;
            byte[] b = new byte[blen];
            int len = 0;
            while ((len = fis.read(b, 0, blen)) != -1) {
                bos.write(b, 0, len);
            }
            bos.flush();
            // logger.info("下载【" + urlAddr + "】->【" + localAddr + "】成功");
        catch (Exception e) {
            throw new ServiceException(e);
        finally {
            if (bos != null) {
                try {
                    bos.close();
                catch (Exception e) {
                    e.printStackTrace();
                }
            }
            if (fis != null) {
                try {
                    fis.close();
                catch (Exception e) {
                    e.printStackTrace();
                }
            }
        }
 
        // // 根据String形式创建一个URL对象,
        // URL url = new URL(urlAddr);
        // // 实列一个URLconnection对象,用来读取和写入此 URL 引用的资源
        // URLConnection con = url.openConnection();
        // // 获取一个输入流
        // InputStream is = con.getInputStream();
        // BufferedInputStream bis = new BufferedInputStream(is);
        // // 实列一个输出对象
        // FileOutputStream fos = new FileOutputStream(fileAddr);
        // BufferedOutputStream bos = new BufferedOutputStream(fos);
        // // 用来接收每次读取的字节个数
        // int length = -1;
        // // 一个byte[]数组,一次读取多个字节
        // byte[] buffer = new byte[7092];
        // // 循环判断,如果读取的个数b为空了,则is.read()方法返回-1,具体请参考InputStream的read();
        // while ((length = bis.read(buffer, 0, 7092)) != -1) {
        // // 将对象写入到对应的文件中
        // bos.write(buffer, 0, length);
        // }
        // // 刷新流
        // bos.flush();
        // fos.flush();
        // // 关闭流
        // bos.close();
        // fos.close();
        // bis.close();
        // is.close();
    }
 
    /**
     * 获取网络字符串 编码默认GB2312
     
     * @param url
     *            远程地址
     * @return 远程地址响应结果
     */
    public static String getStringByURL(String url) {
        return getStringByURL(url, "GB2312");
    }
 
    /**
     * 获取网络字符串 编码默认GB2312
     
     * @author zhangjun
     * @param url
     *            远程地址
     * @param encoding
     *            网页的编码集
     * @return 远程地址响应结果
     */
    public static String getStringByURL(String url, String encoding) {
        StringBuffer sb = new StringBuffer();
        // 建立文件写入流
        // 建立缓冲写入流
        BufferedReader br = null;
        try {
            // 建立网络连接
            URL urlObj = new URL(url);
            // 打开网络连接
            URLConnection uc = urlObj.openConnection();
            // uc.setRequestProperty("User-Agent", "java");
            // 建立文件写入流
            // 建立缓冲写入流
            br = new BufferedReader(new InputStreamReader(uc.getInputStream(), encoding));
            String sLine = null;
            sLine = br.readLine();
            sLine = JavaUtil.readFirstLine(sLine);
            if (sLine != null) {
                sb.append(sLine);
                while ((sLine = br.readLine()) != null) {
                    // 一边读,一边写
                    // sb.append(sLine + System.getProperty("line.separator"));
                    sb.append(sLine);
                }
            }
        catch (MalformedURLException e) {
            throw new ServiceException("连接网络失败", e);
        catch (IOException e) {
            throw new ServiceException("打开网络连接失败", e);
        finally {
            if (br != null) {
                try {
                    br.close();
                catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
        return sb.toString();
    }
 
}



更多文章、技术交流、商务合作、联系博主

微信扫码或搜索:z360901061

微信扫一扫加我为好友

QQ号联系: 360901061

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描下面二维码支持博主2元、5元、10元、20元等您想捐的金额吧,狠狠点击下面给点支持吧,站长非常感激您!手机微信长按不能支付解决办法:请将微信支付二维码保存到相册,切换到微信,然后点击微信右上角扫一扫功能,选择支付二维码完成支付。

【本文对您有帮助就好】

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描上面二维码支持博主2元、5元、10元、自定义金额等您想捐的金额吧,站长会非常 感谢您的哦!!!

发表我的评论
最新评论 总共0条评论