使用用户输入文件名创建java编程到网页源代码

时间:2018-04-07 21:16:58

标签: java

我正在尝试处理将源代码捕获到文件中的程序。我尝试了一种不同的方式使其工作,但它似乎无法正常工作。例如,我想捕获网页源代码并允许用户将程序保存为.txt格式。任何人都可以帮我吗? `

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.*;
import java.io.File;
import java.io.FileWriter;


public class ReadFromWeb {
    public static void readFromWeb(String webURL) throws IOException {
        URL url = new URL(webURL); // create a new url 
        InputStream is =  url.openStream(); //input 

        //read url 
        try( BufferedReader br = new BufferedReader(new InputStreamReader(is))) { 
            String line;
            while ((line = br.readLine()) != null) {
                System.out.println(line);
            }
        }
        catch (MalformedURLException e) {
            e.printStackTrace();
            throw new MalformedURLException("URL is malformed!!");
        }
        catch (IOException e) {
            e.printStackTrace();
            throw new IOException();
        }

    }




    public static void main(String[] args) throws IOException {
        Scanner login = new Scanner(System.in);
        Scanner cn= new Scanner(System.in); //create case name scaner
        Scanner sc = new Scanner(System.in); // create the scanner for capture webpage

        String Username;
        String Password;

        Username = "steven";
        Password = "1234";

        System.out.println("enter username : ");
        String username = login.next();

        System.out.println("enter password : ");
        String password= login.next();

        if (username.equals(Username)&& (password.equals(Password))){
           System.out.println("logged in");



        //create file name and save file

        System.out.println("enter case number :"  );
        String input = cn.nextLine().trim();
        File file = new File(input);

        file.createNewFile();

        //write into file
        FileWriter writer = new FileWriter(file);



        System.out.println("enter URL : ");
        String print;
        String url = sc.nextLine();  // read the URL
        readFromWeb(url); //show the url source data
       // writer.write(print); //write into file
       // writer.close(); //write close
        }
        else if (username.equals(Username)){ //invalid password

            System.out.println ("invalid password");

        }
        else if (password.equals(Password)){ //invalid username
            System.out.println("Invalid username");

    }
        else { //invalid bth username and password
            System.out.println("invalid username & password");
            System.exit(0);
        }



}
}

`

所以基本上程序要求用户登录,然后文件名将与用户输入的情况相同。之后,用户粘贴网址,系统将捕获它并将其保存到文件中。但可行的是我无法将文件保存到用户输入的文件名中。

1 个答案:

答案 0 :(得分:0)

您甚至没有尝试在输出文件中写入内容。

我看到三种可能的解决方案:

1。让你的方法写出输出

为此,请将readFromWeb的名称更改为download并声明第二个参数,即File。然后让while循环将line写入文件,而不是stdout

优点:

  • 内存占用量小(最大行数)

缺点:

  • 没有良好的关注点分离,因为您的方法

2。让您的方法返回内容并将其写入文件

不是将这些行写到stdout,而是将StringBuilder附加到一个大胖子String并将其从您的方法中返回(不要忘记添加该行手动中断)。

优点:

  • 关注点分离(从web /输出读取到文件)

缺点:

  • 一个大缓冲区(对大文件不太好)

3。 返回使用线路流

不是通过while循环处理方法中的行,而是使用BufferedReader lines()方法获得的行流。然后将forEach()方法与println() PrintWrite方法一起使用(您需要将FileWriter放在那里 - 这是必要的,因为append()没有&{39}。给你换行符。)

优点:

  • 使用明确意图的功能概念
  • 同样,不需要大缓冲

缺点:

  • 此方法也未将读/写分开
  • 还有更好的方法可以做到这一点,但这应该会让你开心。

更新:由于最初的想法需要对BufferedReader实例进行更复杂的管理,因此我更新了答案,直接在方法中使用了行流。