Java.io.FileNotFoundException using File object - java

File read = new File("Numbers.txt");
Scanner inputFile = new Scanner(read);
while(inputFile.hasNext())
{
sum = inputFile.nextDouble() + sum;
count++;
}
inputFile.close();//close the input file
I'm trying to read data out of the text file Numbers.txt and the following code compiles fine but I get the Java.io.FileNotFoundException error when the program runs. I've also tried entering the full file path but I might have done it wrong. Any ideas?

Make Sure your text file is in the folder with your java file
because you used the direct path .
and try this code check, if still not working .
BufferedReader read = new BufferedReader(new FileReader("yourTextFile.txt"));
String line = read.readLine();
while(line !=null)
{
System.out.println(line);
line=read.readLine();
}
}catch(Exception ex)
{System.out.println(ex.getMessage());}

Try adding
System.out.println("Full path is " + read.getCanonicalPath()
+ ", canRead=" + read.canRead()
+ ", exists=" + read.exists());
and then see whether the full path exists on your file system, and whether it is readable according to canRead.
If the file is a symlink, canRead might return true in that the symlink is resolvable even though the file to which the link points is unreadable. To deal properly with symlinks you really need to use the new java.nio.file APIs.

Related

Java - File IO - AbsolutePath() does not return the path to the file

I have been trying to get this method working for the past few days always coming back to the same problem. My file won't open unless the file path is specified and formatted.
This is my code:
text = new MyArrayList<>();
String filePath = new File(fileName).getAbsolutePath();
filePath = filePath.replace('\\', '/');
try {
Scanner s = new Scanner(new File(filePath));
while (s.hasNext()) {
text.add(s.next());
}
s.close();
}
catch(FileNotFoundException e){
System.out.println("File not found.");
}
For some reason when I invoke the getAbsolutePath(), it gives me this path : "C:/Zaid/College/CE2336/Programs/File.txt"
whereas the file path that actually allows me to access the file is:
"C:/Zaid/College/CE2336/Programs/MyImplementations/File.txt"
I don't understand what I should do to clean this up.
P.S. The MyImplementations is the package where the text file and my code reside in.
When you call
String filePath = new File(fileName).getAbsolutePath();
you are creating file in your root directory of the project and then getting that path instead of the file you already have and want to get
This should be sufficient in your case:
Scanner s = new Scanner(new File(fileName));
Also ensure when handling errors you share all the information you have: Print the file that was not found. You will see that this makes troubleshooting just so much easier.
catch(FileNotFoundException e){
System.out.println("File not found.");
e.printStackTrace(System.out);
}

JAVA - File I/O cant get file to read

I'm trying to get inventory.csv to load in Eclipse, and I'm not sure where I'm supposed to put the location of the file (Example: c:\\Users\\...) or if I even need it, considering it's in the same folder. I recieved an "unable to load inventory.csv." output. My driver finishes the rest of the program with no errors afterwards.
public int readInventory(Automobile[] inventory)
{
final String FILENAME = "inventory.csv";
int size = 0;
Scanner input = new Scanner("inventory.csv");
try
{
input = new Scanner(new File(FILENAME));
}
catch (FileNotFoundException e)
{
System.out.println("Unable to open file " + FILENAME + ".");
}
// ...
return size;
}
Here is the output I'm getting with no syntax errors.
Unable to open file inventory.csv.
considering it's in the same folder.
Same folder as what? inventory.csv was not present in the current working directory when you executed your program.
If you are trying to read a CSV file from a single Java program then directly keep your file in the same location where the class was created.
In eclipse, keep the CSV file directly under your project directory. As you can see, the Employee.xml file directly under JavaPrac project.enter image description here
You should try this
try{
FileReader fr=new FileReader(filename);
BufferedReader br =new BufferedReader(fr)
String lime=br.readLine();
br.close();
catch(Exeption e){}

Java Scanner(System.in) does not open file after user input

Hello there I am facing an issue which I cannot find a solution. I am asking the user to input the name of a file but the output i get is always ''unable to open file''. Any advice would be much appreciated.
Scanner reader = new Scanner(System.in);
System.out.println("Enter the name of textfile to be read ( add .txt): ");
String fileName = reader.next();
String line = null;
BufferedReader bufferedReader = new BufferedReader(fileReader);
while((line = bufferedReader.readLine()) != null) {
System.out.println(line);
catch(FileNotFoundException ex) {
System.out.println(
"Unable to open file '" +
fileName + "'");
}
catch(IOException ex) {
System.out.println(
"Error reading file '"
+ fileName + "'");
// Or we could just do this:
// ex.printStackTrace();
}
}
The FileNotFoundException is always executed but why?
P.S if I change the path to a specific location such as "C:\etc" it reads the file.
If you don't specify the absolute file path, ie, C:/dir/..., java will look in the same directory as the project root (the same directory as your src and bin folders). If the file is there, it will find it with just the file name, or if you make a directory in that folder, you would need that directory in the path. The same is true if you have an executable JAR, it will look in the same directory that the JAR is located.
If you only give the file name and not the path, Java doesn't know where to look. If you are certain that the file will be in the project directory, just prepend C:/etc to the user input.

How do I read a .csv file in Java with some cells containing multiple lines?

I am trying to read a .csv file in a Java program. The file has some cells which contain multiple lines.
I am on a linux OS, so I tried removing the line breaks with the following:
awk -v RS="" '{gsub (/\n/,"")}1' cleanPaperAuthor.csv > cleanPaperAuthor1.csv
That DID result in the multi-line data in the cell being displayed all on one line. But when I attempted to read in the file in java, the reader still thought that it had encountered the end of the line in the middle of the cell data.
So I tried
awk -v RS="" '{gsub (/\r/,"")}1' cleanPaperAuthor1.csv > cleanPaperAuthor2.csv
That resulted in ALL data in the .csv file being put on one line.
So then I tried
awk -v RS="" '{gsub (/\r\n/,"")}1' cleanPaperAuthor.csv > cleanPaperAuthor3.csv.
I'm not sure yet if that worked - I am still in the process of opening the file.
I know there is a CSVReader class out there, but I would really like to figure out what I can do without having to deal with getting that set up and changing my code. Anyone out there have any ideas? I'm completely befuddled at this point.
Using a CSV parser is extremely easy; both the setup and the API. And, in addition to handling the values that span multiple lines it can take care of things like commas in quoted elements and parsing just the values inside the quotes "" etc. for you. Plus, you can use the library to serialize your text back to CSV as well.
Here's an example with OpenCSV to read a line of csv values.
String input = "value1, \"value2\", \"value3, 1234\", \"value4\n"
+ "value5\n"
+ "value6\"";
try (CSVReader reader = new CSVReader(new StringReader(input))) {
String [] tokens;
while ((tokens = reader.readNext()) != null) {
System.out.println(Arrays.toString(tokens));
}
} catch (IOException e) {
e.printStackTrace();
}
Output : ("value3, 1234" is one value.)
[value1, value2, value3, 1234, value4
value5
value6]
Just make sure to add Apache Commons Lang 3.x jar to your classpath.
String UPLOADED_FOLDER = "/home/Rahul/Developement/Rahul/personal/uploadedfile/";
try {
// ** get the file and store at to that location **
byte[] bytes = file.getBytes();
Path path = Paths.get(UPLOADED_FOLDER + file.getOriginalFilename());
Files.write(path, bytes);
redirectAttributes.addFlashAttribute("You successfully uploaded '" + file.getOriginalFilename() + "'");
} catch (IOException e) {
e.printStackTrace();
}
try {
String fileName = file.getOriginalFilename();
System.out.println("/home/Rahul/Developement/Rahul/personal/uploadedfile/" + fileName);
String filePath = new File("/home/Rahul/Developement/Rahul/personal/uploadedfile/")
.getAbsolutePath();
boolean check = true;
File file1 = new File("/home/Rahul/Developement/Rahul/personal/uploadedfile/" + fileName);
System.out.println(file1.exists());
// TO CHECK FILE IS CSV OR NOT
if (fileName.endsWith(".csv")) {
check = true;
System.out.println("extension");
if (!fileName.isEmpty()) {
// *** to read the file from the location
// **("/home/Rahul/Developement/Rahul/personal/uploadedfile/")**
BufferedReader br = new BufferedReader(new FileReader(
"/home/Rahul/Developement/Rahul/personal/uploadedfile/" + fileName));
InputStream is = new FileInputStream(
"/home/Rahul/Developement/Rahul/personal/uploadedfile/" + fileName);
}

Not able to open HDFS file from mapper Hadoop

I searched a lot but failed to find a solution to this problem.
Actually the file I want to access is in HDFS, but not in input path (the path which was input to the map/reduce job). And I want to access it from mapper.
The hdfs path specified in the input path is perfectly accessible from mapper but the other hdfs files are not.
INside mapper:-
FileSystem FS1=FileSystem.get(conf);
Path path=new Path(""+FS1.getHomeDirectory());
FSDataInputStream fsdis=FS1.open(path);
RESULTS IN the following ERROR:
java.io.IOException : Cannot open filename /user/hadoop
Thanks in advance,
Harsh
I remember using this tutorial to get something similar working. You can give it a try, it has only a few difference tho what you've written but still it might help...
#Edit: ah and I just noticed (after reading the comments) that you are trying to open FS1.getHomeDirectory() and that is a directory. You should point out to a file not a directory, I think (you can check it out in the linked tutorial under "Reading data from a file").
can u try this once
try {
FileSystem fs = FileSystem.get (new Configuration ());
FileStatus[] status = fs.listStatus (new Path ("hdfs://jp.seka.com:9000/user/jeka/in"));
for (int i=0;i < status.length;i++) {
BufferedReader br = new BufferedReader (new InputStreamReader (fs.open (status[i].getPath())));
String line;
line = br.readLine();
while (line != null) {
System.out.println (line);
line=br.readLine ();
}
}
} catch (Exception e) {
System.out.println("File not found");
}

Categories

Resources