Home > Software design >  How to retrieve array values and assign to String variable in java
How to retrieve array values and assign to String variable in java

Time:12-10

I am trying to store the contents from a file into an array String retval[] , copy that array to String[] fed() and pass the array into main. So far, the array stores and copies but the array method returns null in main String []feed; feed=uio.fed();.

UserIO.java

package fileio;
import classes.*;
import java.util.*;
import java.lang.*;
import java.io.*;

public class UserIO
{
 public String search (String line0)
 {
  String line;
  try 
  {
   FileInputStream ufin = new FileInputStream("E:\\3rd sem\\OOP\\Projects\\New folder (2)\\BOOK LIBRARY\\fileio\\user.txt");
   Scanner sc = new Scanner(ufin);
   while (sc.hasNextLine())
   {
    line=sc.nextLine();
    if(line.contains(line0))
    {
      String retval[]= line.split(" ");
      feed= new String[retval.length];
 
      for (String s: retval) 
      {
       System.out.println("\t\t\tFrom retval:" s);
      }  
      for (int n=0;n<retval.length;n  )
      {
       feed[n]=retval[n];
       System.out.println("\tFrom feed:" feed[n]);
       }
     }
   }
            
  } 
  catch(IOException ioe)
  {
    ioe.printStackTrace();
  }


   return line0;
 }
 public static String [] feed;
   
 public static String[] fed()
 { 
  String [] fd;
  fd= new String[feed.length];
  for (int n=0;n<feed.length;n  )
 {
  fd[n]=feed[n];
  System.out.println("From fd:" fd[n]);
 }  
  return fd;
 }
}

Down below is the main method

Execute.java

import java.lang.*;
import java.util.*;
import classes.*;
import fileio.*;
    
    
    
    public class Execute
    {
        public static void main(String[] args) 
        {
            Scanner sc = new Scanner(System.in);
            String adminusername = "a";
            String adminpassword = "p";
            String readerusername = "r";
            String readerpassword = "p";
            String nreaderusername;
            String nreaderpassword;
            Library b = new Library();
            UserFileReadWriteDemo ufrwd = new UserFileReadWriteDemo();
            UserIO uio = new UserIO(); 
            System.out.println("enter id ");
            String id = sc.next();
           uio.search(id);
             try
                {
                 String []feed;
                 feed=uio.fed();
                 //uio.fed()=feed.clone;
    
                  for(int s=0;s<feed.length;s =5)
                  {
                  String nid00= null;
                  feed[0 s]= nid00;
                  String name00=null;
                  feed[1 s]= name00;
                  String age00= null;
                  feed[2 s]= age00;
                  String uname00= null;
                  feed[3 s]= uname00;
                  String upassword00= null;
                  feed[4 s]= upassword00;
                  Reader c00 = new Reader(nid00, name00, age00,uname00,upassword00);
                  b.insertReader(c00);
                  System.out.println(" In main" feed[s]);
    
                   }
                }
                  catch (NullPointerException n)
                  {
                   n.printStackTrace();
                  }
}

CodePudding user response:

Your code is a little bit difficult to read and also has a lot of unnecessary repetitions, for example method fed has no role, why not call search and make search return an array with the found elements? You are making search return the line you are searching for which you already know when you gave search that argument in the first place, it is just returning a useless value. Also it is difficult to understand what search actually does, from what i see it finds the last occurrence of line0 in the file, because it continues to iterate over lines and every time it finds line0 it will create new feed array in UserIO and eliminate all the previous array it found, and will return when all file has been read. If this is your intention then this is not the right way to do it as it is inefficient, because you keep creating arrays that will be discarded. If your intention is the last occurrence of line0 then you can just assign a found line to a String variable and when the iteration finishes just split and return that array as it will be the last occurrence of line0 in the file.

As i see it the only way that fed will return null is if there is no line with line0 in the file because search initializes the array if it finds line0 at least once in the file, this way feed will be an uninitialized array which will be a null pointer.

These lines has no meaning:

                  String nid00= null;
                  feed[0 s]= nid00;
                  String name00=null;
                  feed[1 s]= name00;
                  String age00= null;
                  feed[2 s]= age00;
                  String uname00= null;
                  feed[3 s]= uname00;
                  String upassword00= null;
                  feed[4 s]= upassword00;

I think you meant nid00 = feed[0 s] and so on, because the way you wrote the assignment to nid00 and the other variables will be always null which will be useless.

Also when you copy arrays try to use Arrays.copyOf methods or System.arraycopy they save you writing several lines and also they are more efficient, read about them in the documentation.

And the last thing, it is not useful to catch nullpointer exception if you wrote your code, in general you must know what your methods do and if there is a nullpointer exception in something you wrote then there is something wrong in your code, if for example a method you wrote returns null then you must know about the possibility of a null return and handle that possible return, this way it will be easier for you to read your code and use it and also for others who use your code. The nullpointer you are getting is because you trying to get the length of an uninitialized feed inside fed method, you must be very careful.

  • Related