Counting total file lines using BufferedReader [duplicate]
up vote
0
down vote
favorite
This question already has an answer here:
Number of lines in a file in Java
17 answers
So basically, I'm trying to save several data saved from a file into an Array therefor I need to somehow get the size that the Array must be initialized to.
Is there any way to do that without creating another loop to count all the lines until the read line is null? Since that would require to re-open the file later which would not be very optimal. I'm trying to keep it as compact as possible.
Also, no I can't use ArrayLists.
java arrays bufferedreader
marked as duplicate by Mark Rotteveel
StackExchange.ready(function()
if (StackExchange.options.isMobile) return;
$('.dupe-hammer-message-hover:not(.hover-bound)').each(function()
var $hover = $(this).addClass('hover-bound'),
$msg = $hover.siblings('.dupe-hammer-message');
$hover.hover(
function()
$hover.showInfoMessage('',
messageElement: $msg.clone().show(),
transient: false,
position: my: 'bottom left', at: 'top center', offsetTop: -7 ,
dismissable: false,
relativeToBody: true
);
,
function()
StackExchange.helpers.removeMessages();
);
);
);
Nov 11 at 11:23
This question has been asked before and already has an answer. If those answers do not fully address your question, please ask a new question.
|
show 5 more comments
up vote
0
down vote
favorite
This question already has an answer here:
Number of lines in a file in Java
17 answers
So basically, I'm trying to save several data saved from a file into an Array therefor I need to somehow get the size that the Array must be initialized to.
Is there any way to do that without creating another loop to count all the lines until the read line is null? Since that would require to re-open the file later which would not be very optimal. I'm trying to keep it as compact as possible.
Also, no I can't use ArrayLists.
java arrays bufferedreader
marked as duplicate by Mark Rotteveel
StackExchange.ready(function()
if (StackExchange.options.isMobile) return;
$('.dupe-hammer-message-hover:not(.hover-bound)').each(function()
var $hover = $(this).addClass('hover-bound'),
$msg = $hover.siblings('.dupe-hammer-message');
$hover.hover(
function()
$hover.showInfoMessage('',
messageElement: $msg.clone().show(),
transient: false,
position: my: 'bottom left', at: 'top center', offsetTop: -7 ,
dismissable: false,
relativeToBody: true
);
,
function()
StackExchange.helpers.removeMessages();
);
);
);
Nov 11 at 11:23
This question has been asked before and already has an answer. If those answers do not fully address your question, please ask a new question.
2
Why not simply create an array of reasonably large size, and start adding data to it. If the data size becomes larger than the array, then do what ArrayLists do -- create a larger backing array and copy the data to it.
– Hovercraft Full Of Eels
Nov 10 at 1:26
@HovercraftFullOfEels Since that would result in a lot of unused & wasted memory which is not a good practice
– MoveUK
Nov 10 at 1:30
1
Just so we know all the bizarre restrictions in advance, what else can't you use?
– James K Polk
Nov 10 at 1:30
Quite the opposite. It would give you enough memory when and where you need it.
– Hovercraft Full Of Eels
Nov 10 at 1:30
1
Otherwise you're talking about reading through the file twice, once to get the number of lines and then create the array, and again to add them to your array. Which carries more overhead? creating slots in memory or physically reading and re-reading a file?
– Hovercraft Full Of Eels
Nov 10 at 1:36
|
show 5 more comments
up vote
0
down vote
favorite
up vote
0
down vote
favorite
This question already has an answer here:
Number of lines in a file in Java
17 answers
So basically, I'm trying to save several data saved from a file into an Array therefor I need to somehow get the size that the Array must be initialized to.
Is there any way to do that without creating another loop to count all the lines until the read line is null? Since that would require to re-open the file later which would not be very optimal. I'm trying to keep it as compact as possible.
Also, no I can't use ArrayLists.
java arrays bufferedreader
This question already has an answer here:
Number of lines in a file in Java
17 answers
So basically, I'm trying to save several data saved from a file into an Array therefor I need to somehow get the size that the Array must be initialized to.
Is there any way to do that without creating another loop to count all the lines until the read line is null? Since that would require to re-open the file later which would not be very optimal. I'm trying to keep it as compact as possible.
Also, no I can't use ArrayLists.
This question already has an answer here:
Number of lines in a file in Java
17 answers
java arrays bufferedreader
java arrays bufferedreader
asked Nov 10 at 1:24
MoveUK
31
31
marked as duplicate by Mark Rotteveel
StackExchange.ready(function()
if (StackExchange.options.isMobile) return;
$('.dupe-hammer-message-hover:not(.hover-bound)').each(function()
var $hover = $(this).addClass('hover-bound'),
$msg = $hover.siblings('.dupe-hammer-message');
$hover.hover(
function()
$hover.showInfoMessage('',
messageElement: $msg.clone().show(),
transient: false,
position: my: 'bottom left', at: 'top center', offsetTop: -7 ,
dismissable: false,
relativeToBody: true
);
,
function()
StackExchange.helpers.removeMessages();
);
);
);
Nov 11 at 11:23
This question has been asked before and already has an answer. If those answers do not fully address your question, please ask a new question.
marked as duplicate by Mark Rotteveel
StackExchange.ready(function()
if (StackExchange.options.isMobile) return;
$('.dupe-hammer-message-hover:not(.hover-bound)').each(function()
var $hover = $(this).addClass('hover-bound'),
$msg = $hover.siblings('.dupe-hammer-message');
$hover.hover(
function()
$hover.showInfoMessage('',
messageElement: $msg.clone().show(),
transient: false,
position: my: 'bottom left', at: 'top center', offsetTop: -7 ,
dismissable: false,
relativeToBody: true
);
,
function()
StackExchange.helpers.removeMessages();
);
);
);
Nov 11 at 11:23
This question has been asked before and already has an answer. If those answers do not fully address your question, please ask a new question.
2
Why not simply create an array of reasonably large size, and start adding data to it. If the data size becomes larger than the array, then do what ArrayLists do -- create a larger backing array and copy the data to it.
– Hovercraft Full Of Eels
Nov 10 at 1:26
@HovercraftFullOfEels Since that would result in a lot of unused & wasted memory which is not a good practice
– MoveUK
Nov 10 at 1:30
1
Just so we know all the bizarre restrictions in advance, what else can't you use?
– James K Polk
Nov 10 at 1:30
Quite the opposite. It would give you enough memory when and where you need it.
– Hovercraft Full Of Eels
Nov 10 at 1:30
1
Otherwise you're talking about reading through the file twice, once to get the number of lines and then create the array, and again to add them to your array. Which carries more overhead? creating slots in memory or physically reading and re-reading a file?
– Hovercraft Full Of Eels
Nov 10 at 1:36
|
show 5 more comments
2
Why not simply create an array of reasonably large size, and start adding data to it. If the data size becomes larger than the array, then do what ArrayLists do -- create a larger backing array and copy the data to it.
– Hovercraft Full Of Eels
Nov 10 at 1:26
@HovercraftFullOfEels Since that would result in a lot of unused & wasted memory which is not a good practice
– MoveUK
Nov 10 at 1:30
1
Just so we know all the bizarre restrictions in advance, what else can't you use?
– James K Polk
Nov 10 at 1:30
Quite the opposite. It would give you enough memory when and where you need it.
– Hovercraft Full Of Eels
Nov 10 at 1:30
1
Otherwise you're talking about reading through the file twice, once to get the number of lines and then create the array, and again to add them to your array. Which carries more overhead? creating slots in memory or physically reading and re-reading a file?
– Hovercraft Full Of Eels
Nov 10 at 1:36
2
2
Why not simply create an array of reasonably large size, and start adding data to it. If the data size becomes larger than the array, then do what ArrayLists do -- create a larger backing array and copy the data to it.
– Hovercraft Full Of Eels
Nov 10 at 1:26
Why not simply create an array of reasonably large size, and start adding data to it. If the data size becomes larger than the array, then do what ArrayLists do -- create a larger backing array and copy the data to it.
– Hovercraft Full Of Eels
Nov 10 at 1:26
@HovercraftFullOfEels Since that would result in a lot of unused & wasted memory which is not a good practice
– MoveUK
Nov 10 at 1:30
@HovercraftFullOfEels Since that would result in a lot of unused & wasted memory which is not a good practice
– MoveUK
Nov 10 at 1:30
1
1
Just so we know all the bizarre restrictions in advance, what else can't you use?
– James K Polk
Nov 10 at 1:30
Just so we know all the bizarre restrictions in advance, what else can't you use?
– James K Polk
Nov 10 at 1:30
Quite the opposite. It would give you enough memory when and where you need it.
– Hovercraft Full Of Eels
Nov 10 at 1:30
Quite the opposite. It would give you enough memory when and where you need it.
– Hovercraft Full Of Eels
Nov 10 at 1:30
1
1
Otherwise you're talking about reading through the file twice, once to get the number of lines and then create the array, and again to add them to your array. Which carries more overhead? creating slots in memory or physically reading and re-reading a file?
– Hovercraft Full Of Eels
Nov 10 at 1:36
Otherwise you're talking about reading through the file twice, once to get the number of lines and then create the array, and again to add them to your array. Which carries more overhead? creating slots in memory or physically reading and re-reading a file?
– Hovercraft Full Of Eels
Nov 10 at 1:36
|
show 5 more comments
3 Answers
3
active
oldest
votes
up vote
0
down vote
I would go for an ArrayList, as Haroon and Hovercraft.
However, if it is not an option, why not :
// 1. Create a new Set of String
Set<String> stringSet = new HashSet<String>();
// 2. Loop through bufferedReader and add lines to set
for (String line = br.readLine(); line != null; line = br.readLine())
stringSet.add(line);
// 3. Copy set to a new array
int n = stringSet.size();
String array = new String[n];
array = stringSet.toArray(array);
But don't expect huge performances.
2
Why not? 1) Because it will use a lot more memory than just using an ArrayList. 2) Because duplicate lines will be lost. 3) Because the lines will be reordered.
– Stephen C
Nov 10 at 2:08
And if OP can't use aList
they probably can't use aSet
– GBlodgett
Nov 10 at 2:08
Seems there are some good reason to not do that, indeed !
– AllirionX
Nov 10 at 18:02
add a comment |
up vote
0
down vote
You can get the total number of lines by :
long count = Files.lines(Paths.get(PATH)).count();
Now you can create an array using count
String numOfLines = new String [(int) count];
The Files.lines(Path path) internally uses BufferedReader
to read the file.
add a comment |
up vote
-1
down vote
If you know in advance how many lines there will be you create the array before the loop and then you will need a counter which you use an an index into the array. You increment the counter each time through the loop.
If the number of lines is variable then add the lines to an ArrayList in the loop and then convert the ArrayList to an array after the loop
add a comment |
3 Answers
3
active
oldest
votes
3 Answers
3
active
oldest
votes
active
oldest
votes
active
oldest
votes
up vote
0
down vote
I would go for an ArrayList, as Haroon and Hovercraft.
However, if it is not an option, why not :
// 1. Create a new Set of String
Set<String> stringSet = new HashSet<String>();
// 2. Loop through bufferedReader and add lines to set
for (String line = br.readLine(); line != null; line = br.readLine())
stringSet.add(line);
// 3. Copy set to a new array
int n = stringSet.size();
String array = new String[n];
array = stringSet.toArray(array);
But don't expect huge performances.
2
Why not? 1) Because it will use a lot more memory than just using an ArrayList. 2) Because duplicate lines will be lost. 3) Because the lines will be reordered.
– Stephen C
Nov 10 at 2:08
And if OP can't use aList
they probably can't use aSet
– GBlodgett
Nov 10 at 2:08
Seems there are some good reason to not do that, indeed !
– AllirionX
Nov 10 at 18:02
add a comment |
up vote
0
down vote
I would go for an ArrayList, as Haroon and Hovercraft.
However, if it is not an option, why not :
// 1. Create a new Set of String
Set<String> stringSet = new HashSet<String>();
// 2. Loop through bufferedReader and add lines to set
for (String line = br.readLine(); line != null; line = br.readLine())
stringSet.add(line);
// 3. Copy set to a new array
int n = stringSet.size();
String array = new String[n];
array = stringSet.toArray(array);
But don't expect huge performances.
2
Why not? 1) Because it will use a lot more memory than just using an ArrayList. 2) Because duplicate lines will be lost. 3) Because the lines will be reordered.
– Stephen C
Nov 10 at 2:08
And if OP can't use aList
they probably can't use aSet
– GBlodgett
Nov 10 at 2:08
Seems there are some good reason to not do that, indeed !
– AllirionX
Nov 10 at 18:02
add a comment |
up vote
0
down vote
up vote
0
down vote
I would go for an ArrayList, as Haroon and Hovercraft.
However, if it is not an option, why not :
// 1. Create a new Set of String
Set<String> stringSet = new HashSet<String>();
// 2. Loop through bufferedReader and add lines to set
for (String line = br.readLine(); line != null; line = br.readLine())
stringSet.add(line);
// 3. Copy set to a new array
int n = stringSet.size();
String array = new String[n];
array = stringSet.toArray(array);
But don't expect huge performances.
I would go for an ArrayList, as Haroon and Hovercraft.
However, if it is not an option, why not :
// 1. Create a new Set of String
Set<String> stringSet = new HashSet<String>();
// 2. Loop through bufferedReader and add lines to set
for (String line = br.readLine(); line != null; line = br.readLine())
stringSet.add(line);
// 3. Copy set to a new array
int n = stringSet.size();
String array = new String[n];
array = stringSet.toArray(array);
But don't expect huge performances.
answered Nov 10 at 1:41
AllirionX
1765
1765
2
Why not? 1) Because it will use a lot more memory than just using an ArrayList. 2) Because duplicate lines will be lost. 3) Because the lines will be reordered.
– Stephen C
Nov 10 at 2:08
And if OP can't use aList
they probably can't use aSet
– GBlodgett
Nov 10 at 2:08
Seems there are some good reason to not do that, indeed !
– AllirionX
Nov 10 at 18:02
add a comment |
2
Why not? 1) Because it will use a lot more memory than just using an ArrayList. 2) Because duplicate lines will be lost. 3) Because the lines will be reordered.
– Stephen C
Nov 10 at 2:08
And if OP can't use aList
they probably can't use aSet
– GBlodgett
Nov 10 at 2:08
Seems there are some good reason to not do that, indeed !
– AllirionX
Nov 10 at 18:02
2
2
Why not? 1) Because it will use a lot more memory than just using an ArrayList. 2) Because duplicate lines will be lost. 3) Because the lines will be reordered.
– Stephen C
Nov 10 at 2:08
Why not? 1) Because it will use a lot more memory than just using an ArrayList. 2) Because duplicate lines will be lost. 3) Because the lines will be reordered.
– Stephen C
Nov 10 at 2:08
And if OP can't use a
List
they probably can't use a Set
– GBlodgett
Nov 10 at 2:08
And if OP can't use a
List
they probably can't use a Set
– GBlodgett
Nov 10 at 2:08
Seems there are some good reason to not do that, indeed !
– AllirionX
Nov 10 at 18:02
Seems there are some good reason to not do that, indeed !
– AllirionX
Nov 10 at 18:02
add a comment |
up vote
0
down vote
You can get the total number of lines by :
long count = Files.lines(Paths.get(PATH)).count();
Now you can create an array using count
String numOfLines = new String [(int) count];
The Files.lines(Path path) internally uses BufferedReader
to read the file.
add a comment |
up vote
0
down vote
You can get the total number of lines by :
long count = Files.lines(Paths.get(PATH)).count();
Now you can create an array using count
String numOfLines = new String [(int) count];
The Files.lines(Path path) internally uses BufferedReader
to read the file.
add a comment |
up vote
0
down vote
up vote
0
down vote
You can get the total number of lines by :
long count = Files.lines(Paths.get(PATH)).count();
Now you can create an array using count
String numOfLines = new String [(int) count];
The Files.lines(Path path) internally uses BufferedReader
to read the file.
You can get the total number of lines by :
long count = Files.lines(Paths.get(PATH)).count();
Now you can create an array using count
String numOfLines = new String [(int) count];
The Files.lines(Path path) internally uses BufferedReader
to read the file.
edited Nov 10 at 10:13
answered Nov 10 at 6:57
Nicholas K
4,20241029
4,20241029
add a comment |
add a comment |
up vote
-1
down vote
If you know in advance how many lines there will be you create the array before the loop and then you will need a counter which you use an an index into the array. You increment the counter each time through the loop.
If the number of lines is variable then add the lines to an ArrayList in the loop and then convert the ArrayList to an array after the loop
add a comment |
up vote
-1
down vote
If you know in advance how many lines there will be you create the array before the loop and then you will need a counter which you use an an index into the array. You increment the counter each time through the loop.
If the number of lines is variable then add the lines to an ArrayList in the loop and then convert the ArrayList to an array after the loop
add a comment |
up vote
-1
down vote
up vote
-1
down vote
If you know in advance how many lines there will be you create the array before the loop and then you will need a counter which you use an an index into the array. You increment the counter each time through the loop.
If the number of lines is variable then add the lines to an ArrayList in the loop and then convert the ArrayList to an array after the loop
If you know in advance how many lines there will be you create the array before the loop and then you will need a counter which you use an an index into the array. You increment the counter each time through the loop.
If the number of lines is variable then add the lines to an ArrayList in the loop and then convert the ArrayList to an array after the loop
answered Nov 10 at 1:29
Haroon Iftikhar
1838
1838
add a comment |
add a comment |
2
Why not simply create an array of reasonably large size, and start adding data to it. If the data size becomes larger than the array, then do what ArrayLists do -- create a larger backing array and copy the data to it.
– Hovercraft Full Of Eels
Nov 10 at 1:26
@HovercraftFullOfEels Since that would result in a lot of unused & wasted memory which is not a good practice
– MoveUK
Nov 10 at 1:30
1
Just so we know all the bizarre restrictions in advance, what else can't you use?
– James K Polk
Nov 10 at 1:30
Quite the opposite. It would give you enough memory when and where you need it.
– Hovercraft Full Of Eels
Nov 10 at 1:30
1
Otherwise you're talking about reading through the file twice, once to get the number of lines and then create the array, and again to add them to your array. Which carries more overhead? creating slots in memory or physically reading and re-reading a file?
– Hovercraft Full Of Eels
Nov 10 at 1:36