title: Java - File Reading after exporting to executable jar file in eclipse
body: <p>In eclipse when I export to my code to an executable jar file, the jar can't find any files. The code I'm using is<br>
  <code>FileReader fr = new FileReader("src/pkg/Password.txt");
  BufferedReader br = new BufferedReader(fr);</code>
  That is generating a <code>FileNotFoundException</code><br>
  Note: this code works fine in eclipse.
  Is there a way to do this properly without using <code>.getResource()</code> or <code>.getResourseAsStream()</code> because there is no constructor for FileReader with a URL or an InputStream</p>
  
  <p>Here is my code for one class:  </p>
  
  <pre><code>package pkg;
  
  import java.awt.Color;
  import java.awt.GridBagConstraints;
  import java.awt.GridBagLayout;
  import java.awt.Insets;
  import java.awt.event.ActionEvent;
  import java.awt.event.ActionListener;
  import java.io.BufferedReader;
  import java.io.FileReader;
  import java.io.IOException;
  import java.io.InputStreamReader;
  
  import javax.swing.JButton;
  import javax.swing.JLabel;
  import javax.swing.JPanel;
  import javax.swing.JPasswordField;
  import javax.swing.event.DocumentEvent;
  import javax.swing.event.DocumentListener;
  
  public class MainP extends JPanel {
  
  /**
   * 
   */
  private JButton btnAddCoupon, btnChangeStarCount;
  private static final long serialVersionUID = 2669362135801409216L;
  private JPasswordField passwordField;
  static String s;
  
  /**
   * Create the panel.
   */
  public MainP() {
      GridBagLayout gridBagLayout = new GridBagLayout();
      gridBagLayout.columnWidths = new int[] { 245, 94, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
      gridBagLayout.rowHeights = new int[] { 49, 0, 0, 0, 0, 0 };
      gridBagLayout.columnWeights = new double[] { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
              0.0, 0.0, 0.0, 0.0, Double.MIN_VALUE };
      gridBagLayout.rowWeights = new double[] { 0.0, 0.0, 0.0, 0.0, 0.0,
              Double.MIN_VALUE };
      setLayout(gridBagLayout);
  
              JButton btnCashIn = new JButton("Cash In");
              btnCashIn.addActionListener(new ActionListener() {
                  public void actionPerformed(ActionEvent e) {
                      MainClass.f2.setVisible(true);
                      MainClass.f.setVisible(false);
  
                  }
              });
              GridBagConstraints gbc_btnCashIn = new GridBagConstraints();
              gbc_btnCashIn.fill = GridBagConstraints.BOTH;
              gbc_btnCashIn.insets = new Insets(0, 0, 5, 5);
              gbc_btnCashIn.gridx = 0;
              gbc_btnCashIn.gridy = 0;
              add(btnCashIn, gbc_btnCashIn);
  
      JLabel lblAdminrequiresPassword = new JLabel(
              "Admin (Requires Password)");
      GridBagConstraints gbc_lblAdminrequiresPassword = new GridBagConstraints();
      gbc_lblAdminrequiresPassword.insets = new Insets(0, 0, 5, 0);
      gbc_lblAdminrequiresPassword.gridx = 9;
      gbc_lblAdminrequiresPassword.gridy = 0;
      add(lblAdminrequiresPassword, gbc_lblAdminrequiresPassword);
  
      btnAddCoupon = new JButton("Add Coupon");
      btnAddCoupon.addActionListener(new ActionListener() {
          public void actionPerformed(ActionEvent e) {
              MainClass.f3.setVisible(true);
              MainClass.f.setVisible(false);
          }
      });
      GridBagConstraints gbc_btnAddCoupon = new GridBagConstraints();
      gbc_btnAddCoupon.insets = new Insets(0, 0, 5, 0);
      gbc_btnAddCoupon.gridx = 9;
      gbc_btnAddCoupon.gridy = 1;
      add(btnAddCoupon, gbc_btnAddCoupon);
  
      btnChangeStarCount = new JButton("Change Star Count");
      btnChangeStarCount.addActionListener(new ActionListener() {
          public void actionPerformed(ActionEvent e) {
              MainClass.f4.setVisible(true);
              MainClass.f.setVisible(false);
          }
      });
      GridBagConstraints gbc_btnChangeStarCount = new GridBagConstraints();
      gbc_btnChangeStarCount.insets = new Insets(0, 0, 5, 0);
      gbc_btnChangeStarCount.gridx = 9;
      gbc_btnChangeStarCount.gridy = 2;
      add(btnChangeStarCount, gbc_btnChangeStarCount);
      enab(false);
      passwordField = new JPasswordField();
      passwordField.setForeground(Color.red);
      passwordField.getDocument().addDocumentListener(new DocumentListener() {
  
          @Override
          public void removeUpdate(DocumentEvent e) {
              try {
                  BufferedReader br = new BufferedReader(new FileReader("/pkg/Password.txt"));
                  s = br.readLine();
                  if (passwordField.getText().equals(s)) {
                      passwordField.setForeground(Color.green);
                      enab(true);
                  } else {
                      passwordField.setForeground(Color.red);
                      enab(false);
                  }
                  br.close();
              } catch (IOException e1) {
                  e1.printStackTrace();
              }
          }
  
          @Override
          public void insertUpdate(DocumentEvent e) {
              try {
                  BufferedReader br = new BufferedReader(new FileReader("/pkg/Password.txt"));
                  s = br.readLine();
                  if (passwordField.getText().equals(s)) {
                      passwordField.setForeground(Color.green);
                      enab(true);
                  } else {
                      passwordField.setForeground(Color.red);
                      enab(false);
                  }
                  br.close();
              } catch (IOException e1) {
                  e1.printStackTrace();
              }
          }
  
          @Override
          public void changedUpdate(DocumentEvent e) {
              // XXX Do not change XXX
          }
      });
      GridBagConstraints gbc_passwordField = new GridBagConstraints();
      gbc_passwordField.insets = new Insets(0, 0, 5, 0);
      gbc_passwordField.fill = GridBagConstraints.HORIZONTAL;
      gbc_passwordField.gridx = 9;
      gbc_passwordField.gridy = 3;
      add(passwordField, gbc_passwordField);
  
      JLabel lblPasswordField = new JLabel("Password Field");
  
      GridBagConstraints gbc_lblPasswordField = new GridBagConstraints();
      gbc_lblPasswordField.gridx = 9;
      gbc_lblPasswordField.gridy = 4;
      add(lblPasswordField, gbc_lblPasswordField);
  
  }
  
  private void enab(boolean b) {
      btnAddCoupon.setEnabled(b);
      btnChangeStarCount.setEnabled(b);
  }
  
  }
  </code></pre>
  
  <p><strong>Note:</strong> I tried using both <code>FileReader</code> and <code>InputStreamReader</code></p>
  
  <h2>Directory Tree:</h2>
  
  <p><code>MyJar.jar (C://Users/Orion31/Desktop/MyJar.jar
  |
  ---- pkg
        |
        --- Password.txt
        |
        --- StarCount.txt
        |
        --- CS.txt
  </code></p>