【问题标题】:Is there a way to save input information after the program terminates?有没有办法在程序终止后保存输入信息?
【发布时间】:2013-11-14 18:05:23
【问题描述】:

我对 java 有点陌生,八月份刚开始上高中水平的课程。我还在学习基础知识,对JOptionPane、Scanner、Array和系统行等基础知识有了大概的了解。我的问题是,是否有办法创建一个独立的 Java 程序,您只需双击桌面上的图标即可启动它。如果是这样,有没有办法创建文件转储,您只能通过密码访问它?我已经有一个基本的登录程序,它允许基于预定的用户和密码进行访问。该程序的目标是在想要拥有它的人之间创建一个安全的(即使它是基本的)文件共享,并阻止那些没有的人共享,其中包含特定文件(.docx、.jpeg、.pptx 等.) 用于学校工作。如果是这样,是否还有一种方法可以将这些文件的访问权限限制为只能通过该程序访问?

这是我到目前为止的代码:

import javax.swing.JOptionPane.*;
import java.lang.Math.*;
import java.lang.System.*;
import java.awt.*;
import java.awt.event.*;
import java.util.*;
import javax.swing.*;
import javax.swing.JFrame;

public class UserLog extends JFrame  

{

public static void main(String[]Args) throws InterruptedException 
    {
    boolean isValid=false;
    while(!isValid)
        {
    // Components related to "login" field    
    JLabel label_loginname = new JLabel("Enter your login name:");    
    JTextField loginname = new JTextField(15);    
    // loginname.setText("EnterLoginNameHere"); 
    // Pre-set some text    
    // Components related to "password" field    
    JLabel label_password = new JLabel("Enter your password:");    
    JPasswordField password = new JPasswordField();    
    // password.setEchoChar('@'); 
    // Sets @ as masking character    
    // password.setEchoChar('\000'); 
    // Turns off masking    
    JCheckBox rememberCB = new JCheckBox("Remember me");

    Object[] array = {label_loginname,
    loginname,                       
    label_password,                       
    password,                       
    rememberCB};
    Object[] options = {"Login", "Cancel"};
    int res = JOptionPane.showOptionDialog(null,
                                            array,
                                            "Login",
                                            JOptionPane.YES_NO_OPTION,
                                            JOptionPane.QUESTION_MESSAGE,
                                            null,     //do not use a custom Icon
                                            options,  //the titles of buttons
                                            options[0]); //default button title

    // User hit Login    
    if (res == 0) 
        { 
            System.out.println( "Login" ); 
        }    
    // User hit CANCEL    
    if (res == 1) 
        { 
            System.out.println( "Canceled" ); 
        }    
    // User closed the window without hitting any button    
    if (res == JOptionPane.CLOSED_OPTION) 
        { 
            System.out.println( "CLOSED_OPTION" ); 
        }


    // Output data in "login" field, if any    
    String newloginname = loginname.getText();    
    String newpassword = new String(password.getPassword());    
    if (newloginname.equalsIgnoreCase("Cody_Coulter") && newpassword.equals("cheche1"))
        {
            System.out.println("Login Successful!");
            boolean selectedCB = rememberCB.isSelected();    
            System.out.println( "selectedCB: " + selectedCB );
            Thread.sleep(3000);
            Object[] array1= {"It's about time to choose"};
            Object[] options1= {"Leave", "Keep Going"};
            int res1 = JOptionPane.showOptionDialog(null,
                                            array1,
                                            "There",
                                            JOptionPane.YES_NO_OPTION,
                                            JOptionPane.QUESTION_MESSAGE,
                                            null,     //do not use a custom Icon
                                            options1,  //the titles of buttons
                                            options1[0]); //default button title
            if(res1==1)
                {
                    String name1 = JOptionPane.showInputDialog(null,
                                                        "What is your name?");
                    int length = 0;
                    length = newpassword.length();
                    String Pass = "*";
                    newpassword =newpassword.replaceAll(".","*");
                    System.out.println("Username: "+newloginname+"\nPassword: "+
                                        newpassword+"\nName: "+name1);
                }

        }
    else {
            JOptionPane.showMessageDialog(null,"Wrong Username or Password!");
            isValid=false;
         }
        }
    // Output data in "password" field, if any    
    // Output state of "remember me" check box    

    }

}

这只是程序的登录屏幕,但我只想能够:

  • 选择编辑用户或密码,例如输入 old pass: now new: repeat: 并保存新密码。
  • 创建只能通过此程序访问的文件转储,其中包含 docx、pptx 等基本文件
  • 如何编辑用户名、密码或向程序添加新用户,只有拥有管理员密码。
  • 如果我有这个程序的唯一帐户,而其他人想要一个,则阅读内容为:

    Username: _____
    Password: _____
    Retype Password:_____
    Authentication: _____
    

    然后它会创建一个永久帐户。

很抱歉提出了一些非正统的问题,但我非常好奇,而且对这些板子很陌生。我只想知道java是否可以,如果可以,我可以在哪里参考这些材料来学习/自学。

【问题讨论】:

  • 是的,你可以做所有这些事情。制作独立的 Java 应用程序很容易,只需导出为 JAR。其他的东西有点复杂,你描述的比你的问题标题高级得多。如果你还没有使用过基本的文件 IO,我会说这在这一点上是不现实的。
  • 当然可以在 Java 中从头开始重新实现 TrueCrypt,但是对于 SO 问题来说,教如何做到这一点是一项相当大的任务......!或许您可以分解您对无法完成的特定任务的具体问题,并提出易于给出正确技术答案的问题?
  • 感谢您的意见。抱歉,问了这么多,只是还不习惯这些论坛和他们的措辞。不过非常感谢大家,下次我一定会实施的。

标签: java swing joptionpane


【解决方案1】:

是的,这是可能的,但我认为一篇文章中有太多要回答的问题。

您应该研究的是 Java 核心库中的 Scanner 类。使用 Scanner 类,您可以读取和读取文件。在这里搜索一些提示。使用扫描仪,您可以拥有一个写入密码的文件(保持文件受保护),并且您可以通过重写文件上的密码(并从同一文件中读取)来更改密码。

【讨论】:

  • 他不仅想读/写文本文件,还想为其他文件做一个包装器(带有加密和文件关联等),所以Scanner 并不是最好的选择。也许DataOutputStream 会更合适。另外,向文件写入密码?你疯了吗?至少,散列密码并写下来。
  • 当然,这只是为了阻止用户通过程序访问文件。没有什么可以阻止某人实际打开文件本身。
  • 您可以使用某种加密将其写入文件吗?
  • 这个想法来自一个在应用商店中流传的应用:照片库。它将照片存储在该缓存中,无法在照片查看器中访问...当然这是仅基于应用程序的移动设备,但是 PC 是否有类似的方式?例如将文件隐藏到几乎不可能找到的程度,最快的方法是通过这个程序。至少如果有任何方法可以这样做。而对宗政理来说,不一定是直接到文件,而是到一个包含文件的目录,只能通过这个目录访问。如前所述。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-11-01
  • 2020-03-17
  • 2017-03-03
  • 2020-09-03
相关资源
最近更新 更多