As you said, you need to move all the data into another file before deleting one. However, in SQL Server you don't actually play with files but filegroups. When an object is created you define the filegroup where the data goes, not the file. SQL Server makes the decision what file to use if there are multiple files within the file group.
Having that said, the easiest way to move data between filegroups is to create or re-create the indexes for the objects that reside in the filegroup you want to make empty. It's obvious that re-creating the index in another filegroup moves that index but the trick is that re-creating a clustered index actually moves the table data.
This is documented as how-to do in
Move an Existing Index to a Different Filegroup[
^]
Hope it helps.