这篇文章将为大家详细讲解有关如何验证数据库中URL的有效性,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。

创新互联建站网站建设由有经验的网站设计师、开发人员和项目经理组成的专业建站团队,负责网站视觉设计、用户体验优化、交互设计和前端开发等方面的工作,以确保网站外观精美、成都网站设计、成都网站建设、外贸网站建设易于使用并且具有良好的响应性。
曲库中一些歌曲的URL虽然存在,但是根据URL已经下载不到音乐了.
Nginx显示404错误.
验证数据库中歌曲的URL是否能够下载
首先,先把数据库中的歌曲URL导出到文件.如下格式(歌曲ID,音乐地址类型,路径)
1000;AccompanimentURL ;/00/00/00001000_accompaniment.m4a
然后使用程序扫描URL
        
            
            
            
        
        
            
            
            
        
        
            
            
            
        
程序比较渣..以后得学习一下对象封装
- import java.io.BufferedReader; 
- import java.io.FileInputStream; 
- import java.io.FileWriter; 
- import java.io.IOException; 
- import java.io.InputStreamReader; 
- import java.util.HashMap; 
- import java.util.HashSet; 
- import java.util.Map; 
- import java.util.Set; 
- import java.util.concurrent.BlockingQueue; 
- import java.util.concurrent.LinkedBlockingQueue; 
- import java.util.concurrent.Semaphore; 
- import java.util.concurrent.atomic.AtomicInteger; 
- import io.netty.bootstrap.Bootstrap; 
- import io.netty.buffer.ByteBuf; 
- import io.netty.buffer.Unpooled; 
- import io.netty.channel.Channel; 
- import io.netty.channel.ChannelHandlerContext; 
- import io.netty.channel.ChannelInboundHandlerAdapter; 
- import io.netty.channel.ChannelInitializer; 
- import io.netty.channel.EventLoopGroup; 
- import io.netty.channel.nio.NioEventLoopGroup; 
- import io.netty.channel.socket.nio.NioSocketChannel; 
- import io.netty.handler.codec.LineBasedFrameDecoder; 
- import io.netty.handler.codec.string.StringDecoder; 
- public class URLChecker { 
- public static void main(String[] args) { 
- String sourceFile="F:\\normal.txt"; 
- String resultFile="F:\\result.csv"; 
- new URLInput(sourceFile, resultFile); 
- } 
- } 
- class URLConnection extends Thread{ 
- @Override 
- public void run() { 
- while(true){ 
- int start=count.get(); 
- try { 
- Thread.sleep(1000); 
- } catch (InterruptedException e) { 
- // TODO Auto-generated catch block 
- e.printStackTrace(); 
- } 
- int end=count.get(); 
- System.out.println("每秒检查:"+(end-start)); 
- } 
- } 
- Semaphore sem = new Semaphore(20); 
- String[] hosts = new String[5]; 
- AtomicInteger count = new AtomicInteger(); 
- EventLoopGroup group = new NioEventLoopGroup(3); 
- URLInput input; 
- URLOutput output; 
- URLConnection(URLInput input,URLOutput writer) { 
- hosts[0] = "172.16.1.151"; 
- hosts[1] = "172.16.1.152"; 
- hosts[2] = "172.16.1.153"; 
- hosts[3] = "172.16.1.154"; 
- hosts[4] = "172.16.1.155"; 
- this.output=writer; 
- this.input=input; 
- } 
- public void connection(final Map - map) 
- throws InterruptedException { 
- sem.acquire(); 
- int index = count.getAndIncrement(); 
- Bootstrap boot = new Bootstrap(); 
- boot.group(group).channel(NioSocketChannel.class).handler(new ChannelInitializer() { 
- @Override 
- protected void initChannel(Channel ch) throws Exception { 
- ch.pipeline().addLast(new LineBasedFrameDecoder(409600)); 
- ch.pipeline().addLast(new StringDecoder()); 
- ch.pipeline().addLast(new HttpClientHandler(map, sem,input,output)); 
- } 
- }); 
- boot.connect(hosts[index % hosts.length], 80); 
- } 
- } 
- class HttpClientHandler extends ChannelInboundHandlerAdapter { 
- StringBuffer sb = new StringBuffer(512); 
- Map - map = new HashMap - (); 
- Semaphore sem; 
- URLInput input; 
- URLOutput writer; 
- public HttpClientHandler(Map - map, Semaphore sem, URLInput input, URLOutput writer) { 
- this.map = map; 
- this.sem = sem; 
- this.writer=writer; 
- this.input=input; 
- } 
- @Override 
- public void channelReadComplete(ChannelHandlerContext ctx) throws Exception { 
- sem.release(); 
- ctx.close(); 
- writer.addSuccURL(map); 
- } 
- @Override 
- public void channelActive(ChannelHandlerContext ctx) throws Exception { 
- StringBuilder sb = new StringBuilder(); 
- sb.append("HEAD " + map.get("url") + " HTTP/1.0\r\n"); 
- sb.append("HOST:" + 80 + "\r\n"); 
- sb.append("Accept:*/*\r\n"); 
- sb.append("\r\n"); 
- ByteBuf bb = Unpooled.copiedBuffer(sb.toString().getBytes("utf8")); 
- ctx.writeAndFlush(bb); 
- } 
- @Override 
- public void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception { 
- String content = (String) msg; 
- if (content.contains(":")) { 
- String[] s = content.split(":"); 
- map.put(s[0].trim(), s[1].trim()); 
- } else if (content.startsWith("HTTP/1.1")) { 
- map.put("httpcode", content.replaceAll("HTTP/1.1 ", "")); 
- } 
- } 
- @Override 
- public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) throws Exception { 
- cause.printStackTrace(); 
- ctx.close(); 
- input.addFailUrl(map); 
- sem.release(); 
- } 
- } 
- class URLInput { 
- URLConnection urlcon; 
- URLInput(String sourceFile, String resultFile) { 
- URLOutput output=new URLOutput(resultFile); 
- urlcon=new URLConnection(this, output); 
- output.start(); 
- urlcon.start(); 
- try { 
- init(resultFile); 
- read(sourceFile); 
- } catch (IOException e) { 
- e.printStackTrace(); 
- } catch (InterruptedException e) { 
- e.printStackTrace(); 
- } 
- } 
- /** 
- * 初始化已经处理的文件,用于中断处理后的恢复运行 
- * 
- * @param resultFile 
- * @throws IOException 
- */ 
- private void init(String resultFile) throws IOException { 
- BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(resultFile))); 
- String row = null; 
- while ((row = br.readLine()) != null) { 
- String[] data = row.split(","); 
- set.add(data[0]); 
- } 
- br.close(); 
- } 
- public void addFailUrl(Map - map) { 
- failq.add(map); 
- } 
- final BlockingQueue 
- Set - set = new HashSet - (); 
- private void read(String sourceFile) throws IOException, InterruptedException { 
- BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(sourceFile))); 
- String row = null; 
- while ((row = br.readLine()) != null) { 
- while (failq.size() != 0) { 
- final Map - m = failq.take(); 
- urlcon.connection(m); 
- } 
- String[] data = row.split(";"); 
- final Map - map = new HashMap - (); 
- map.put("songid", data[0]); 
- map.put("type", data[1]); 
- map.put("url", data[2]); 
- if (!set.contains(data[0])) { 
- urlcon.connection(map); 
- } 
- } 
- br.close(); 
- System.out.println("Finish!!"); 
- } 
- } 
- class URLOutput extends Thread { 
- BlockingQueue - > succq = new LinkedBlockingQueue - >(); 
- String resultFile; 
- public void addSuccURL(Map - map) { 
- succq.add(map); 
- } 
- public URLOutput(String resultFile) { 
- this.resultFile = resultFile; 
- } 
- @Override 
- public void run() { 
- Map - map = null; 
- FileWriter fw = null; 
- try { 
- fw = new FileWriter(resultFile, true); 
- while ((map = succq.take()) != null) { 
- fw.write(map.get("songid") + "," + map.get("type") + "," + map.get("url") + "," + map.get("httpcode") 
- + "," + map.get("Content-Length") + "\n"); 
- } 
- } catch (InterruptedException e) { 
- e.printStackTrace(); 
- } catch (IOException e) { 
- e.printStackTrace(); 
- } finally { 
- try { 
- fw.close(); 
- } catch (IOException e) { 
- e.printStackTrace(); 
- } 
- } 
- } 
- } 
关于如何验证数据库中URL的有效性就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。
分享标题:如何验证数据库中URL的有效性
链接分享:http://www.scyingshan.cn/article/gjspip.html

 建站
建站
 咨询
咨询 售后
售后
 建站咨询
建站咨询 
 