You don't say how you're going to populate the lower triangle of the matrix, so it is quite difficult to figure out any solution.
The bottom line is this: can you just read and process one row at a time? If you can, just do it. I'm dealing almost daily with files too large to fit into memory. Most of the time, I get around by reading and processing them one record at a time. But every now and then, it gets more complicated: in such circumstances, there is often no general solution; the possible solution (or solutions) is specific to the problem at hand.
If you can't process your file line by line, then you'll have to tell us why and be much more specific about what you're trying to do exactly. Some of us might be able to suggest another solution.