Q:

Output file location and contents based on list of files

I have a file that contains locations of different files called locationfile.txt it contains:  
/home/user/documents/file1
/home/user/file2
/home/user/file3

Each text files have about 10 lines and I want to output all files to another file called finalfile.  
I figured out that if I do
cat locationfile.txt | while read line; do cat "$line"; done

This prints all files together so it becomes a ~30 line text file.  
What my question is, how can I spit that file out put include the file locations inbetween the text like this:
/home/user/documents/file1
text
text
text
""
/home/user/file2
text
text
text
""
/home/user/file3
text
text
text
""

A:

Before the cat do an echo or printf of the filename:
while read line; do printf '%s\n' "$line"; cat "$line"; done <locationfile.txt >finalfile

Or, more readable:
while read line; do
  printf '%s\n' "$line"
  cat "$line"
done <locationfile.txt >finalfile

Note that this requires all paths in locationfile.txt to have no \ in them. 
Although having \ in path names is highly unusual, it would be safer to do
while read -r line; do
  printf '%s\n' "$line"
  cat "$line"
done <locationfile.txt >finalfile

... which doesn't have the same restrictions. 
Adding a check to make sure the file actually exist too, and outputting a warning if it doesn't:
while read -r line; do
  if [[ -f "$line" ]]; then
    printf '%s\n' "$line"
    cat "$line"
  else
    printf 'Warning: "%s" does not exist\n' "$line" >&2
  fi
done <locationfile.txt >finalfile

"Does not exist" here means "is at least not a regular file". 
If you want the "" there as well, as a sort of end-of-file-contents-marker, just put that out after cat:
while read -r line; do
  if [[ -f "$line" ]]; then
    printf '%s\n' "$line"
    cat "$line"
    echo '""'
  else
    printf 'Warning: "%s" does not exist\n' "$line" >&2
  fi
done <locationfile.txt >finalfile

And finally, give things self-documenting names:
while read -r file_path; do
  if [[ -f "$file_path" ]]; then
    printf '%s\n' "$file_path"
    cat "$file_path"
    echo '""'
  else
    printf 'Warning: "%s" does not exist\n' "$file_path" >&2
  fi
done <file_paths.txt >files_concat_with_paths.txt

A:

while read file; do
    ( echo "$file"; cat "$file"; echo '"""' ) >> /path/to/outputfile
done < /path/to/filelist

A:

Here's an option if you have GNU awk, that avoids shell loops altogether:
xargs -d '\n' -a locationfile.txt gawk 'BEGINFILE{print FILENAME} 1' > newfile

or with GNU sed:
xargs -d '\n' -a locationfile.txt sed -s '1F' > newfile

If you don't care about the exact format of the filenames, then you can use this trick with head:
xargs -d '\n' -a locationfile.txt head -vn -0 > newfile

(the -n -0 tells head to output all lines except the first 0 i.e. all lines).