【问题标题】:Java - Malformed URL - Not correct - No protocol [closed]Java - 格式错误的 URL - 不正确 - 无协议 [关闭]
【发布时间】:2014-02-18 16:02:57
【问题描述】:

这段代码:

        String file = "";
    String filename = "";
    try{
        BufferedReader ins = new BufferedReader(new FileReader(new File("filename.txt")));//get file name
        while (ins.ready()) {
           filename = ins.readLine();
        }
        ins.close();
        }catch(Exception e){
        }

        String[] sa = filename.split("/");
        file = sa[sa.length - 1];

        try {
            System.out.println(filename);
        } catch (Exception e) {
            e.printStackTrace();
        }

打印:

http://wordpress.org/plugins/about/readme.txt

当我尝试这样做时:

         URL url = new URL(filename);

我收到格式错误的 URL 异常:没有协议 这是无缘无故发生的。如果我手动将文件名字符串分配给 “http://wordpress.org/plugins/about/readme.txt”可以正常使用,文件阅读器有问题吗?

事情是这样的

从文件中读取一个字符串,然后把它变成一个 URL!停止错误编辑!

【问题讨论】:

  • readme.txt 不是有效的 URL。
  • filename = 长的东西,为什么它不是一个有效的 url,@Sotiris Delimanolis,你误解了整个事情。当我尝试将文件名设为 url 时,整个问题就发生了。
  • 我向你道歉,我很抱歉。我收回了我的回答。我会尽力弥补它,确保你得到这个答案。
  • @MickJ 好的,但是发生了一个错误的编辑,以某种方式获得了批准......
  • @user3310358:当您将字符串传递给new URL(filename) 时,您确定字符串filename 的开头或结尾没有空格吗?例如,System.out.println("'" + filename + "'");

标签: java file url exception malformed


【解决方案1】:

一个想法:

可能是文件以 UTF-8 格式保存,但文件开头有一个额外的 BOM 字符。这是一个零宽度的 Unicode 空间。

filename = filename.replaceFirst("^\uFFFE", "");

【讨论】:

  • +1 每当我处理带有 BOM 的文件时,总会遇到这种情况。我希望图书馆会为我照顾它们,但这可能会产生意想不到的后果。
【解决方案2】:

工作代码:

import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.net.URL;

public class MyFileReader {

    public static void main(String[] args) {
        String file = "";
        String filename = "";
        try {
            BufferedReader ins = new BufferedReader(new FileReader(new File("c:\\filename.txt")));// get file name
            while (ins.ready()) {
                filename = ins.readLine();
            }
            ins.close();
        } catch (Exception e) {
            e.printStackTrace();
        }

        String[] sa = filename.split("/");
        file = sa[sa.length - 1];

        try {
            System.out.println(filename);
            URL url = new URL(filename);
        } catch (Exception e) {
            e.printStackTrace();
        }
        try {
            System.out.println(file);
        } catch (Exception e) {
            e.printStackTrace();
        }

    }

}

filename.txt 的内容:

http://wordpress.org/plugins/about/readme.txt

程序输出:

http://wordpress.org/plugins/about/readme.txt
readme.txt

错误/异常:

【讨论】:

  • 由于第一个 Sysout 正在打印有效的 URL,filename 已经设置正确!
  • 你不明白,这不是我想做的。我从一个名为 filename.txt 的文件中得到一个字符串。之后,我将字符串转换为 url
  • 既然代码中的答案完全符合 OPs 规范,没有关于 UTF-8 的未说明信息,那么收回反对票如何?
  • 删除答案怎么样? :) 我的意思是,这不是问题的解决方案,是吗?
  • 根据问题中提供的信息,这是列出代码、输入、输出的问题的有效解决方案,因此不再值得反对。当然,我无法进入 OP 的头脑或做出猜测。
猜你喜欢
  • 2019-04-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-12-15
  • 2019-07-02
  • 1970-01-01
  • 2018-12-02
相关资源
最近更新 更多