Although I would choose to write this code significantly differently, you're really close to the solution you're looking for. When you write out the listboxes with this code...
For i = 0 To testListBox.Items.Count - 1
SW.Write(testListBox.Items.Item(i) & ",")
Next
SW.WriteLine(); // <<-- Create a new line...
For i = 0 To gradeTestListBox.Items.Count - 1
SW.Write(gradeTestListBox.Items.Item(i) & ",")
Next
...be sure to write a line between them. That way, you've got multiple comma-delimited lines instead of just one long one.
When you read these back in, just do a SR.ReadLine for each comma-delimited line and split it with String.Split. String.Split returns an array of strings and you pass it a comma because that's what you used when joining the strings. (You could also replace your loops that write these lines with String.Join calls to make your code cleaner.)
Dim s As String() = SW.ReadLine().Split(New Char() {","c})
testListBox.Items.AddRange(s)
See this page for examples of VB.NET and Split. http://www.dotnetperls.com/split-vbnet
EDIT The only thing left to do is add readline calls for each of your listboxes, like this:
Dim S As String() = SR.ReadLine.Split(New Char() {","c})
testListBox.Items.AddRange(S)
S = SR.ReadLine().Split(New Char() {","c})
gradeTestListBox.Items.AddRange(S)
S = SR.ReadLine().Split(New Char() {","c})
assignmentListBox.Items.AddRange(S)
S = SR.ReadLine().Split(New Char() {","c})
gradeAssignmentListBox.Items.AddRange(S)