diff --git a/src/com/facebook/buck/util/ProjectFilesystem.java b/src/com/facebook/buck/util/ProjectFilesystem.java
index 7197341..58f4344 100644
--- a/src/com/facebook/buck/util/ProjectFilesystem.java
+++ b/src/com/facebook/buck/util/ProjectFilesystem.java
@@ -28,9 +28,12 @@
 import com.google.common.io.ByteStreams;
 import com.google.common.io.Files;
 
+import java.io.BufferedWriter;
 import java.io.File;
+import java.io.FileWriter;
 import java.io.IOException;
 import java.io.InputStream;
+import java.io.Writer;
 import java.nio.file.FileVisitor;
 import java.nio.file.LinkOption;
 import java.nio.file.Path;
@@ -132,6 +135,15 @@
     return getFileForRelativePath(pathRelativeToProjectRoot).exists();
   }
 
+  public long getFileSize(Path pathRelativeToProjectRoot) throws IOException {
+    File file = getFileForRelativePath(pathRelativeToProjectRoot);
+    // TODO(mbolin): Decide if/how symlinks should be supported and add unit test.
+    if (!file.isFile()) {
+      throw new IOException("Cannot get size of " + file + " because it is not an ordinary file.");
+    }
+    return file.length();
+  }
+
   /**
    * Deletes a file specified by its path relative to the project root.
    * @param pathRelativeToProjectRoot path to the file
@@ -204,6 +216,23 @@
     mkdirs(file.getParentFile().toPath());
   }
 
+  /**
+   * Writes each line in {@code lines} with a trailing newline to a file at the specified path.
+   * <p>
+   * The parent path of {@code pathRelativeToProjectRoot} must exist.
+   */
+  public void writeLinesToPath(Iterable<String> lines, Path pathRelativeToProjectRoot)
+      throws IOException {
+    try (Writer writer = new BufferedWriter(
+        new FileWriter(
+            getFileForRelativePath(pathRelativeToProjectRoot)))) {
+      for (String line : lines) {
+        writer.write(line);
+        writer.write('\n');
+      }
+    }
+  }
+
   public void writeContentsToPath(String contents, Path pathRelativeToProjectRoot)
       throws IOException {
     Files.write(contents, getFileForRelativePath(pathRelativeToProjectRoot), Charsets.UTF_8);
diff --git a/test/com/facebook/buck/util/ProjectFilesystemTest.java b/test/com/facebook/buck/util/ProjectFilesystemTest.java
index 9bc5add..db11483 100644
--- a/test/com/facebook/buck/util/ProjectFilesystemTest.java
+++ b/test/com/facebook/buck/util/ProjectFilesystemTest.java
@@ -22,6 +22,7 @@
 
 import com.google.common.base.Charsets;
 import com.google.common.base.Optional;
+import com.google.common.collect.ImmutableList;
 import com.google.common.io.Files;
 
 import org.junit.Before;
@@ -32,6 +33,7 @@
 import java.io.File;
 import java.io.IOException;
 import java.nio.file.Path;
+import java.nio.file.Paths;
 
 /** Unit test for {@link ProjectFilesystem}. */
 public class ProjectFilesystemTest {
@@ -90,4 +92,27 @@
     Files.write("foo\nbar\nbaz\n", multiLineFile, Charsets.UTF_8);
     assertEquals(Optional.of("foo"), filesystem.readFirstLine("foo.txt"));
   }
+
+  @Test
+  public void testGetFileSize() throws IOException {
+    File wordsFile = tmp.newFile("words.txt");
+    String content = "Here\nare\nsome\nwords.\n";
+    Files.write(content, wordsFile, Charsets.UTF_8);
+
+    assertEquals(content.length(), filesystem.getFileSize(Paths.get("words.txt")));
+  }
+
+  @Test(expected = IOException.class)
+  public void testGetFileSizeThrowsForNonExistentFile() throws IOException {
+    filesystem.getFileSize(Paths.get("words.txt"));
+  }
+
+  @Test
+  public void testWriteLinesToPath() throws IOException {
+    Iterable<String> lines = ImmutableList.of("foo", "bar", "baz");
+    filesystem.writeLinesToPath(lines, Paths.get("lines.txt"));
+
+    String contents = Files.toString(new File(tmp.getRoot(), "lines.txt"), Charsets.UTF_8);
+    assertEquals("foo\nbar\nbaz\n", contents);
+  }
 }
